0

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))

期待どおりに解決しません。

4

1 に答える 1

1

多分代わりに

print "Second pass"
for l in list:
    print "Random number in b: ",a.b.attr

使用する

print "Second pass"
for l in list:
    print "Random number in b: ", l.b.attr
于 2012-12-13T06:11:42.080 に答える