首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Python的浅拷贝与深拷贝是什么?有什么区别?

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的浅拷贝与深拷贝是什么?有什么区别?”的大致介绍,希望对您有所帮助!

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190116A0GF6Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券