2013-07-24 6 views
0

이 코드를 실행 시키면 :이해 파이썬 변수 할당

a = [1,2,3] 
b = a 
b.remove(2) 
print(a,b) 

내가 볼 것으로 예상하는 것은 :

[1,2,3] [1,3] 

하지만이입니다 난 정말 무엇을 얻을 :

[1,3] [1,3] 

왜 전화 b.remove(2)a에 영향을 줍니까? 원본 콘텐츠의 사본을 a으로 유지하면서 b을 변경하려면 어떻게해야합니까?

+2

당신이 읽고 싶은 수 있습니다 : 를 http://nedbatchelder.com/text/names.html 당신이 그들을 다른 목록 싶은 경우, 복사본을 만들 – Yann

답변

4

b = a을 수행하면 동일한 목록에 대한 다른 참조를 만들기 만하면됩니다. 따라서 해당 목록을 수정하면 ab 모두에 영향을 미칩니다. 따라서 b.remove(2)을하면 소유하고있는 단일 목록에 영향을 미칩니다.

b = a[:] 

이 방법, 당신은 목록의 복사본을 생성, 당신은 다른 변경하지 않고 하나를 수정할 수 있습니다 : 당신이 당신의 예상 결과를 얻고 싶은 경우에

, 당신은 목록의 복사본을 만들 수 있습니다.

>>> a = [1,2,3] 
>>> b = a[:] 
>>> b.remove(2) 
>>> print a,b 
[1, 2, 3] [1, 3] 
2

ab 같은 목록이 이름입니다, 그래서 당신은 하나 명의 이름을 통해 목록을 변경하는 경우, 당신은 다른 이름을 통해 변경 사항을 볼 수 있습니다.

b = a[:] 

또는

b = list(a)