为什么复制的对象具有与以前在Python中复制的对象相同的ID?

矿物质

我试图了解一种观察。我有一个应用程序,可以加载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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

复制具有不同外键ID的相同类的对象

来自分类Dev

为什么多个进程在python中具有相同的对象ID

来自分类Dev

Python对象复制以前创建的对象,

来自分类Dev

为什么多处理中的新对象具有相同的ID?

来自分类Java

休眠将对象值复制到具有新生成的ID的新对象中

来自分类Dev

为什么没有按值复制此对象

来自分类Dev

在Docker中复制具有相同ID的图像

来自分类Dev

id()的含义以及为什么与Process fork不同的对象具有相同的id()值?

来自分类Dev

为什么我需要在Python中复制类实例,而无需复制其他对象类型?

来自分类Dev

为什么在复制数组中更改对象也会影响原始对象中的对象?

来自分类Dev

为什么merge()返回复制对象?

来自分类Python

为什么同一对象的不同方法具有相同的“ id”?

来自分类Dev

复制具有列表成员的对象列表

来自分类Dev

复制具有双向关系的对象

来自分类Dev

C ++拥有自己的对象堆栈。在push()中复制了什么?

来自分类Dev

为什么在循环中创建的对象具有相同的地址?

来自分类Java

为什么存储在arrayList中的每个对象的内容具有相同的值?

来自分类Dev

创建具有相同键和值的对象,而无需复制数据

来自分类Dev

将数组复制到具有角度的对象中的对象

来自分类Dev

未命名的Python对象具有相同的ID

来自分类Dev

在js的数组中合并具有相同id的对象

来自分类Dev

合并数组中具有相同ID的对象

来自分类Dev

为什么具有不同 id 的 ndarray 对象同时更改?

来自分类Dev

Python作用域:我在函数中复制了一个列表对象,并修改了重复对象,但原始对象被更改了。为什么?

来自分类Dev

在 Java 中复制对象

来自分类Dev

如何避免使用 ID 在屏幕上复制相同的对象?

来自分类Dev

Parse API:当有多个对象具有相同的对象 id 时会发生什么?

来自分类Dev

具有相同名称的对象在python中引用了不同的id

来自分类Dev

列表中存储的对象具有相同的ID或指向相同的对象

Related 相关文章

  1. 1

    复制具有不同外键ID的相同类的对象

  2. 2

    为什么多个进程在python中具有相同的对象ID

  3. 3

    Python对象复制以前创建的对象,

  4. 4

    为什么多处理中的新对象具有相同的ID?

  5. 5

    休眠将对象值复制到具有新生成的ID的新对象中

  6. 6

    为什么没有按值复制此对象

  7. 7

    在Docker中复制具有相同ID的图像

  8. 8

    id()的含义以及为什么与Process fork不同的对象具有相同的id()值?

  9. 9

    为什么我需要在Python中复制类实例,而无需复制其他对象类型?

  10. 10

    为什么在复制数组中更改对象也会影响原始对象中的对象?

  11. 11

    为什么merge()返回复制对象?

  12. 12

    为什么同一对象的不同方法具有相同的“ id”?

  13. 13

    复制具有列表成员的对象列表

  14. 14

    复制具有双向关系的对象

  15. 15

    C ++拥有自己的对象堆栈。在push()中复制了什么?

  16. 16

    为什么在循环中创建的对象具有相同的地址?

  17. 17

    为什么存储在arrayList中的每个对象的内容具有相同的值?

  18. 18

    创建具有相同键和值的对象,而无需复制数据

  19. 19

    将数组复制到具有角度的对象中的对象

  20. 20

    未命名的Python对象具有相同的ID

  21. 21

    在js的数组中合并具有相同id的对象

  22. 22

    合并数组中具有相同ID的对象

  23. 23

    为什么具有不同 id 的 ndarray 对象同时更改?

  24. 24

    Python作用域:我在函数中复制了一个列表对象,并修改了重复对象,但原始对象被更改了。为什么?

  25. 25

    在 Java 中复制对象

  26. 26

    如何避免使用 ID 在屏幕上复制相同的对象?

  27. 27

    Parse API:当有多个对象具有相同的对象 id 时会发生什么?

  28. 28

    具有相同名称的对象在python中引用了不同的id

  29. 29

    列表中存储的对象具有相同的ID或指向相同的对象

热门标签

归档