2012-04-22 6 views
4

리스트를 바로 복사합니까? 그러나 코드에서 나는 그것을 이해하지 못하는 x = x[:]을보고있다. 두 사본을 어떻게 똑같이 부를 수 있습니까?[:]는 어떻게 파이썬에서 작동합니까?

+8

'a = a + 1'이있는 것과 같습니다. 우선'a + 1'이 평가되고 그 결과가'a'의 현재 값을 오버라이드합니다. 그러나'x = x [:]'는'x'가 함수 매개 변수가 아니고 인수의 사본을 적용하기를 원하지 않는 것처럼 보입니다. –

답변

6

오른쪽이 먼저 평가되고 임시 변수에 배치되며 x가 임시 변수에 다시 할당됩니다. 물론 당신은 그것을 보지 못합니다.

2

"[:]은 어떻게 파이썬에서 작동합니까?" 이 a = a 말처럼 정말으로 발생할 가능성이없는 자체

x = x[:] 

하여이 특정 표현의 맥락에서 까다로운 조금이다.

당신은 간단한 단어에 x에 의해 언급 된 목록의 사본을 만들고 a에 할당

a = x[:] 

같은 것을 볼 가능성이 더 높습니다.

당신은 단순히

a = x 

두 변수가 같은 위치를 참조 것이고, 변수 중 하나에 대한 변경 사항이 모두 반영 될했다합니다. a = x[:]

In [38]: x = range(5) 
In [39]: a = x[:] 

In [40]: a 
Out[40]: [0, 1, 2, 3, 4] 

In [41]: x 
Out[41]: [0, 1, 2, 3, 4] 

In [42]: a[3] = -99  

In [43]: a 
Out[43]: [0, 1, 2, -99, 4] # a changes 

In [44]: x 
Out[44]: [0, 1, 2, 3, 4] # x does not change 

주와 비교해

In [31]: x = range(5) 
In [32]: a = x 

In [33]: a 
Out[33]: [0, 1, 2, 3, 4] 

In [34]: x 
Out[34]: [0, 1, 2, 3, 4] 

In [35]: a[3] = 99 # I am making a change in a 

In [36]: a 
Out[36]: [0, 1, 2, 99, 4] 

In [37]: x 
Out[37]: [0, 1, 2, 99, 4] # but x changes too! 

: @gnibbler 짧은하고 완전한 예제를 제공 여기

는 예를 들어 콜론 표기, a = x를 사용하지 않는 경우 발생하는 것입니다 (아래의 설명에서) x = x[:]을 만나고 그 상황에서 할당이 유용한 목적을 제공한다는 것을 알았지 만 (귀하가 어떤 상황에서 왔는지는 알 수 없지만 이 원래 전체).

+1

필자는 [Felix의 코멘트] (http://stackoverflow.com/questions/10273186/how-does-work-in-python#comment13212644_10273186) 머리 부분에 손톱이 부딪혀서 이것이 이루어질 것이라고 생각합니다. – sarnold

+2

@sarnold 좋은 지적 .. 그냥 그것도 보았다. 나는 "[:] python에서 어떻게 작동합니까?"라는 질문 자체를 보았습니다. – Levon

+0

기존 목록을 dup하려면 x = x [:]를 사용하십시오. – richo

관련 문제