일부 lambdas를 지나가는 것에 의존하는 Python 코드가 몇 개 있습니다. 몇 개의 다른 장소에 복사되지만, 목록에서 튀어 나오면 다른 모든 목록에서 마술처럼 사라집니다. 이것이 버그인지 아닌지는 알 수 없습니다. 나는 이것을 CPython에서 돌리고 있음을 주목할 것이다.람다가 사라지는 이유는 무엇입니까?
a = lambda x: x+x*3
b = []
c = []
for i in range(3):
b.append(a)
for i in range(3):
c.append(b)
while b:
print b.pop()(5)
for d in c:
while d:
print d.pop()(10)
파이썬은 참조 카운팅을 수행 한 경우, 새 목록이 참조 카운트를 증가해야하지만, 람다는 사라지고 유지 :
다음은 나의 점을 설명하기 위해 몇 가지 코드입니다.는 심지어 있도록이 시도 람다의 새로운 인스턴스가 생성되는 첫 번째 루프를 통해 각 시간 : 아직도
b = []
c = []
for i in range(3):
b.append(lambda x: x+x*3)
for i in range(3):
c.append(b)
while b:
print b.pop()(5)
for d in c:
while d:
print d.pop()(10)
없이 이동합니다.
누구에게 무슨 일이 일어나는가에 대한 단서가 있습니까?
'c'에'b'의 복사본을 추가하려면'c.append (b [:]) '라고 말할 수 있습니다. – dfan
감사. '복사'모듈을 사용하여 여기 내 문제를 해결. – supercheetah