Python プログラムで、より小さなプログラムに凝縮できる動作に遭遇しました。私はそれに遭遇し、それと過去を解決したと確信していますが、方法を思い出せません。
次の Python プログラムを検討してください。
import random
class B:
def __init__(self):
self.attr=random.randrange(0,10)
class A:
def __init__(self):
self.b=B()
list=[]
print "First pass"
for i in range(0,10):
a=A()
print "Random number in b: ",a.b.attr
list.insert(0,a)
print "Second pass"
for l in list:
print "Random number in b: ",a.b.attr
通常、次のようなものが出力されます。
First pass
Random number in b: 9
Random number in b: 7
Random number in b: 1
Random number in b: 5
Random number in b: 9
Random number in b: 7
Random number in b: 0
Random number in b: 6
Random number in b: 2
Random number in b: 7
Second pass
Random number in b: 7
Random number in b: 7
Random number in b: 7
Random number in b: 7
Random number in b: 7
Random number in b: 7
Random number in b: 7
Random number in b: 7
Random number in b: 7
Random number in b: 7
これをどのように解決しますか?Pythonがオブジェクトなどをコピーする方法に関係していることは知っていますが、
import copy
list.insert(0,copy.deepcopy(a))
期待どおりに解決しません。