我试图了解一种观察。我有一个应用程序,可以加载Canvas
用户以后可以使用的各种类。这些类位于几个文件中。例如。
canvas/
bw.py
colored.py
oil.py
我像这样导入,实例化和复制这些对象:
canvas_files = os.listdir('images')
imported_canvs = []
for canv in canvas_files:
canv = __import__(canv.split('.')[0], fromlist=['Canvas'])
try:
new_canv = canv.Canvas()
new_canv_copy = copy.copy(new_canv)
imported_canvs.append(new_canv_copy)
except AttributeError as ex:
pass
然后,用户使用列表中的每个Canvas
对象imported_canvs
。但是,当我两次导入并实例化这些对象(for
再次运行循环)时,我可以看到id(new_canv_copy)
与先前导入并实例化的对象相同。除非Canvas
每个实例的设置对于每个实例都应该是唯一的并且当前没有发生,否则这将不是问题。每当用户更改一项设置时,Canvas
他们都会自动复制一份。
为什么会发生这种情况,我在做什么错呢?
使用只会copy.copy()
创建一个浅表副本。在使用复制对象时,您可能需要使用深层复制copy.deepcopy()
。
您可以在这里详细阅读有什么区别:https : //docs.python.org/2/library/copy.html
我不知道canv.Canvas()
内部有什么作用,因此当我自己无法尝试两次运行相同的代码时,很难判断发生了什么。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句