У меня есть некоторый код 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)
Если бы Python выполнял подсчет ссылок, новые списки должны увеличивать счет, но лямбды просто продолжают исчезать.
Я даже пытался это сделать так, чтобы каждый раз в первом цикле создавался новый экземпляр лямбды:
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)
Все еще не уходи.
Кто-нибудь знает, что здесь происходит?