700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > python赋值浅拷贝和深拷贝的区别_浅拷贝 深拷贝和普通赋值操作有什么区别?...

python赋值浅拷贝和深拷贝的区别_浅拷贝 深拷贝和普通赋值操作有什么区别?...

时间:2020-11-12 12:02:23

相关推荐

python赋值浅拷贝和深拷贝的区别_浅拷贝 深拷贝和普通赋值操作有什么区别?...

对于不可变对象,创建副本没有多大意义,因为它们不会改变。对于可变对象^{},^{}和^{}的行为不同。让我们用例子来讨论它们。

赋值操作只是将源的引用赋值给目标,例如:>>> i = [1,2,3]

>>> j=i

>>> hex(id(i)), hex(id(j))

>>> ('0x10296f908', '0x10296f908') #Both addresses are identical

现在i和j在技术上指的是同一个列表。i和j都有相同的内存地址。任何更新

它们中的一个会反射到另一个。e、 克:>>> i.append(4)

>>> j

>>> [1,2,3,4] #Destination is updated

>>> j.append(5)

>>> i

>>> [1,2,3,4,5] #Source is updated

另一方面,copy和deepcopy创建变量的新副本。所以现在对原始变量的更改将不会反映出来

复制变量,反之亦然。但是copy(shallow copy),不要创建嵌套对象的副本,而只是

复制嵌套对象的引用。Deepcopy递归地复制所有嵌套对象。

演示copy和deepcopy行为的一些示例:

使用copy:的平面列表示例>>> import copy

>>> i = [1,2,3]

>>> j = copy.copy(i)

>>> hex(id(i)), hex(id(j))

>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are different

>>> i.append(4)

>>> j

>>> [1,2,3] #Updation of original list didn't affected copied variable

使用copy:的嵌套列表示例>>> import copy

>>> i = [1,2,3,[4,5]]

>>> j = copy.copy(i)

>>> hex(id(i)), hex(id(j))

>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are still different

>>> hex(id(i[3])), hex(id(j[3]))

>>> ('0x10296f908', '0x10296f908') #Nested lists have same address

>>> i[3].append(6)

>>> j

>>> [1,2,3,[4,5,6]] #Updation of original nested list updated the copy as well

使用deepcopy:的平面列表示例>>> import copy

>>> i = [1,2,3]

>>> j = copy.deepcopy(i)

>>> hex(id(i)), hex(id(j))

>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are different

>>> i.append(4)

>>> j

>>> [1,2,3] #Updation of original list didn't affected copied variable

使用deepcopy:的嵌套列表示例>>> import copy

>>> i = [1,2,3,[4,5]]

>>> j = copy.deepcopy(i)

>>> hex(id(i)), hex(id(j))

>>> ('0x102b9b7c8', '0x102971cc8') #Both addresses are still different

>>> hex(id(i[3])), hex(id(j[3]))

>>> ('0x10296f908', '0x102b9b7c8') #Nested lists have different addresses

>>> i[3].append(6)

>>> j

>>> [1,2,3,[4,5]] #Updation of original nested list didn't affected the copied variable

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。