浅拷贝不应该在 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
的事实和神话
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
的事实和神话