我正在尝试理解一个观察结果。
我有一个应用程序,可以加载用户稍后可以使用的各种 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
随后,用户可以使用 imported_canvs
列表中的每个 Canvas
对象。但是,当我导入并实例化这些对象两次(再次运行 for
循环)时,我可以看到 id(new_canv_copy)
与之前导入和实例化的对象相同。
这不会是一个问题,除非每个 Canvas
都有每个实例唯一的设置,并且当前不会发生这种情况。每当用户更改一个 Canvas
中的设置时,它们也会在复制的 Canvas 中自动更改。
为什么会发生这种情况,我做错了什么?
最佳答案
仅使用copy.copy()
即可创建浅拷贝。在使用 copy.deepcopy()
复制对象时,您可能希望使用深层复制.
您可以在这里详细阅读有什么区别:https://docs.python.org/2/library/copy.html
我不知道 canv.Canvas()
里面做了什么,所以当你运行相同的代码两次而我无法自己尝试时,很难判断发生了什么。
关于python - 为什么复制的对象与之前在 Python 中复制的对象具有相同的 id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35680350/