浅拷贝不应该在 python 中创建一个具有不同 id 的对象吗?

Shouldn't shallow copy create an object with different id in python?

list1 = [1,2,3]
list2 =list1
id(list1[0]) == id(list2[0])  #True
id(list1) == id(list2)        #True

我正在学习深拷贝和浅拷贝的概念。我知道 list1 和 list2 将引用同一内存,因此 id(list1[0]) 将等于 id(list2[0])。但是 id(list1) 不应该与 id(list2) 不同,因为两者都是 class 列表的不同对象。

在python中,赋值从不复制数据。您只是得到一个引用相同值的新名称。

基本分为三种情况:

赋值:只是一个指向同一对象的新名称。

copy.copy 复制对象本身,但不复制对象的成员。因此,列表的浅表副本将是一个新列表,具有新 ID,但其元素将指向内存中与原始列表相同的对象。

copy.deepcopy 递归复制所有内容。

好资源: http://www.pythontutor.com/visualize.html#mode=edit

Ned Batchelder,关于 python 名字和模糊 https://youtu.be/_AEJHKGk9ns

的事实和神话