我有一些Python代碼依賴於傳遞一些lambda表達式,並且它們被複制到一些不同的地方,但我發現當我將它們從列表中彈出時,它們就會從所有其他列表中奇蹟般地消失。我不知道這是否是一個錯誤。我會注意到,我在CPython上運行這個。爲什麼我的lambda消失了?
下面是一些代碼來說明我的觀點:
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)
Python是否在做引用計數,新名單應該增加引用計數,但lambda表達式只是不斷消失。
我甚至嘗試這一點,以便通過第一循環創建拉姆達的新實例每次:
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)
仍然沒有去。
任何人都知道這裏發生了什麼?
如果你想把'b'的副本附加到'c',你可以說'c.append(b [:])''。 – dfan 2011-04-08 19:35:12
謝謝。使用「複製」模塊解決了我的問題。 – supercheetah 2011-04-08 19:44:02