python基础_021__浅拷贝和深拷贝的区别

本文探讨了Python中深拷贝与浅拷贝的区别。通过示例展示了当原列表添加元素时,浅拷贝和深拷贝列表的不同响应。浅拷贝仅复制对象本身,但不复制子对象,而深拷贝会递归复制对象及其所有子对象,确保原始对象的修改不会影响深拷贝的对象。
摘要由CSDN通过智能技术生成

import copy

A = [21, 22, 23, 24, ['a', 'b', 'c', 'd'], 25, 26]
B = A  # 直接赋值
C = A[:]  # 浅拷贝
D = copy.copy(A)  # 浅拷贝
E = copy.deepcopy(A)  # 深拷贝

# 看看深拷贝与浅拷贝的区别
# 在A数组的最尾处加一个数
A.append(99)
# 在A数组里面的数组最尾处加一个数
A[4].append(66)

print(f"起始列表A------------>{id(A)}  {id(A[-4])}", A)
print(f"直接把A列表赋值给B---->{id(B)}   {id(B[-4])}", B)
# 起始列表A------------>1941880691264  1941880677056 [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99]
# 直接把A列表赋值给B---->1941880691264   1941880677056 [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26, 99]

print(f"直接浅拷贝A列表给C---->{id(C)}   {id(C[-3])}", C)
print(f"直接浅拷贝A列表给D---->{id(D)}   {id(D[-3])}", D)
# 直接浅拷贝A列表给C---->1941880738752   1941880677056 [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26]
# 直接浅拷贝A列表给D---->1941880738816   1941880677056 [21, 22, 23, 24, ['a', 'b', 'c', 'd', 66], 25, 26]

print(f"直接深拷贝A列表给E---->{id(E)}    {id(E[-3])}", E)
# 直接深拷贝A列表给E---->1941880738560    1941880738688 [21, 22, 23, 24, ['a', 'b', 'c', 'd'], 25, 26]


# 通过以上的例子我们来分析一下这几种复制列表的不同
1.     赋值其实只是传递对象引用,引用对象id是一样的。
2、  浅拷贝产生的对象本身是新的,但是没有拷贝子对象列表,子列表的内容不是新的,只是对原来子列表对象的一个引用。
3 、深拷贝包含对象里面的子对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值