pyhton之浅拷贝(copy)和深拷贝(deepcopy)详解,举例说明

浅谈Python深拷贝与浅拷贝
本文通过一个具体的Python代码示例,详细解释了浅拷贝(copy.copy)与深拷贝(copy.deepcopy)的区别。浅拷贝仅拷贝父对象的值,而子对象仍指向同一内存地址;深拷贝则会复制所有对象,确保新旧对象完全独立。

a = [1, 2, ['a', 'b']]
a1 = a
b = copy.copy(a)
c = copy.deepcopy(a)
a.append(3)
a[2].append('c')
print(a)
print(a1)
print(b)
print(c)

结果:

a ----- [1, 2, ['a', 'b', 'c'], 3]
a1 ----- [1, 2, ['a', 'b', 'c'], 3]
b ----- [1, 2, ['a', 'b', 'c']]
c ----- s[1, 2, ['a', 'b']]

print(id(a))
print(id(a1))
print(id(b))
print(id(c))

id(a) ---- 50472355
id(a1) ---- 5042355
id(b) ---- 8295968
id(c) ---- 50527608

结论:
1.copy()只是拷贝父对象的值,这里也就是指1,2 但是子对象(['a','b'])指向同一个内存地址
2.deepcopy()是将父子对象的值全部复制一份,与原对象无任何关系

下面是子对象的内存地址

print(id(a[2]))
print(id(a1[2]))
print(id(b[2]))
print(id(c[2]))

id(a[2]) --- 8332992
id(a1[2]) --- 8332992
id(b[2]) --- 8332992
id(c[2]) --- 50770128

转载于:https://blog.51cto.com/asura1992/2127853

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值