copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。
copy.deepcopy 深拷贝 拷贝对象及其子对象
一个很好的例子:
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
输出结果:
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
下面一个例子可以看看:
1234567891011
import copy
a = [1, 2, 3, 4, ['a', 'b']] #原始对象
b = a #赋值,传对象的引用
c = copy.copy(a) #对象拷贝,浅拷贝
d = copy.deepcopy(a) #对象拷贝,深拷贝
a.append(5) #修改对象a
a[4].append('c') #修改对象a中的['a', 'b']数组对象
print 'a = ', a
print 'b = ', b
print 'c = ', c
print 'd = ', d
然后自己想一想输出都应该是什么
a是原始对象,作为对照
b是a的引用,和a指向同一个对象
c是a的一个浅拷贝,将a的内容拷贝过来了,就是和a平行的两个对象了,但是里面元素如果是对象,仅拷贝其引用,即a[4]变化后c[4]也对应变化了,因为他俩实际指向同一个对象,而a和c指向不同的对象
d则是从头到尾全部拷贝过来,就连里面的对象也拷贝了一份,因此a[4]变化而d[4]没有变化,因为a[4]和d[4]在拷贝的时候值一样,但是其实已经是两个对象了。
下面是上面内容的输出结果。
1234
a = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
b = [1, 2, 3, 4, ['a', 'b', 'c'], 5]
c = [1, 2, 3, 4, ['a', 'b', 'c']]
d = [1, 2, 3, 4, ['a', 'b']]
以上便是小编对“Python的浅拷贝与深拷贝是什么?有什么区别?”的大致介绍,希望对您有所帮助!
领取专属 10元无门槛券
私享最新 技术干货