python copy与deepcopy (拷贝与深拷贝)

Posted 明远湖的纸飞机

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python copy与deepcopy (拷贝与深拷贝)相关的知识,希望对你有一定的参考价值。

copy与deepcopy

python 中的copy与deepcopy是内存数据的操作,但是两个函数有一定的区别。

1.copy

import copy
list = [1, [4, 5, 6], 2, 3]
list1 = copy.copy(list)

print id(list)

print id(list[1]) print id(list1) print id(list1[1]) list[2] = 100 list[1][0] = 44 print list print list1 结果: 46925320 46912776 46967368 46912776 [1, [44, 5, 6], 100, 3] [1, [44, 5, 6], 2, 3]

经过copy操作的得两个list,list1拥有两个同的地址(46925320和46967368),修改list时不会影响list1的值,但是 list中间的子列表[4,5,6]在list和list1中有相同的地址46912776,所以在修改list中的子列表会影响到list1中的子列表。

 

2.deepcopy

import copy
list = [1, [4, 5, 6], 2, 3]
list2 = copy.deepcopy(list)

print id(list)
print id(list[1])
print id(list2)
print id(list2[1])

list[2] = 100
list[1][0] = 44
print list
print list2

结果:
59508232
59495688
59509384
59508168
[1, [44, 5, 6], 100, 3]
[1, [4, 5, 6], 2, 3]

经过deepcopy的list与list2用有不用的地址59508232,59509384,其中的子列表页拥有不同的地址, 所以不论怎样修改list都不用影响到list2。

结论:

经过copy操作的两个数据对象拥有不同的得地址空间 ,但是这个数据对象如果是内嵌了其他的复杂数据对象,这个内嵌的数据对象在

两个数据对象中拥有相同的地址空间,修改其中的值会互相印象。经过deepcopy的操作的不管是内层还是外层数据对象都拥有不同的地址空间,修改其中的值不会对两个对象都造成影响



以上是关于python copy与deepcopy (拷贝与深拷贝)的主要内容,如果未能解决你的问题,请参考以下文章

copy与deepcopy

浅拷贝与深拷贝的实现方式区别;deepcopy如果你来设计,如何实现

Python 拷贝对象(深拷贝deepcopy与浅拷贝copy)

python(41):copy拷贝(深拷贝deepcopy与浅拷贝copy)

python直接赋值浅拷贝与深拷贝的区别解析

python之copy模块与深浅拷贝