2014-01-14 2 views
1

기존 목록에 대한 목록 이해력을 실행할 때 목록이 변경되지 않은 것으로 나타났습니다.파이썬 목록 이해력이 초기 변수를 변경합니다.

그러나 이해력의 로컬 이름이 동일한 경우를 제외하고는 초기 변수가 다릅니다.

왜 이런가요?

예 : 당신이 볼 수 있듯이

>>> y=[1,2,3,4,5] 

>>> [X**2 for X in y] 
[1, 4, 9, 16, 25] 
>>> y 
[1, 2, 3, 4, 5] 

>>> [y**2 for y in y] 
[1, 4, 9, 16, 25] 
>>> y 
5 

, 두 번째 예에서는 y는 정수 5로 변경되었습니다.

+3

목록 이해는 새로운 가변 범위를 도입하지 않습니다. 동일한 변수 이름을 다시 사용하면 해당 변수를 목록의 마지막 값으로 덮어 씁니다. –

답변

2

원래 y의 마지막 값을 포함하도록 y을 다시 바인딩하고 있습니다.

그건 다르지으로, 다음과 같은 말 : 당신의 코드가 문제를 교란, 두 개의 서로 다른 것들에 대한 y을 사용하는 것을 제외하고

In [18]: [x for x in range(5)] 
Out[18]: [0, 1, 2, 3, 4] 

In [19]: x 
Out[19]: 4 

.하지