python浅拷贝与深拷贝

来源:互联网 发布:淘宝改折扣影响权重吗 编辑:程序博客网 时间:2024/05/17 23:57
一、浅拷贝
浅拷贝是对于一个对象的顶层拷贝,通俗的理解是拷贝了引用,并没有拷贝内容,新变量与被拷贝变量指向同一个对象
1.=
例如:
a=[1,2]
a=b
这就是浅拷贝,即拷贝了引用
=============
二、深拷贝
深拷贝是拷贝了内容,而不是拷贝了引用
2.copy.deepcopy()

需要先 import copy模块
例如:
impor copy
a=[1,2]
c=copy.deepcopy(a)


例如:
a=[1,2]
b=[3,4]
c=[a,b]
d=copy.deepcopy(c)
a.append(5)
此时输出的c[0]的结果是[1,2,5]
此时输出的d[0]的结果是[1,2]
在deepcopy的时候,即便c换成元组,c和d的地址也不一样
所以这种方式的拷贝会深层的拷贝内容,把所有的内容都拷贝下来,而不是仅拷贝一层


3.仅拷贝一层 copy.copy()
例如:
a=[1,2]
b=[3,4]
c=[a,b]
d=copy.copy(c)
a.append(5)
此时输出c[0]的结果是[1,2,5]
此时输出d[0]的结果是[1,2,5]
所以这种拷贝仅拷贝一层内容


对于元组时的一些特点,例如:
a=[1,2]
b=[3,4]
c=(a,b)    #注意此处为元组
d=copy.copy(c)
id(c)
id(d)
此时c和d的地址是一样的
因为对于元组这个不可变类型,仅拷贝一层没有意义
所以copy.copy的时候会判断被拷贝对象是否是可变类型,如果是不可变类型,仅相当于拷贝了引用(浅拷贝)
原创粉丝点击