python3中的copy()和deepcopy()

python3里面列表的拷贝知识点:

(1)单纯的赋值,如b = a; 可以记为“浅浅拷贝”,意思就是只要a改变,b就跟着改变。
(2)copy()方法,如b = copy.copy(a); 可以记为“深浅拷贝”,意思就是a中的父对象(一级目录)是深拷贝,子对象(非一级目录)是浅拷贝。
(3)deepcopy()方法,如b = copy.deepcopy(a); 可以记为“深深拷贝”,意思就是a中的所有对象都是深拷贝。

注:深拷贝就是拷贝过来的永远都是原先的列表,拷贝过来后的列表不管原先的列表再什么变,都不会关联到;
浅拷贝就是拷贝过来的列表会随着原列表的变化而变化。

如下示例代码演示:

import copy

a = [1, 2, [3, 4]]
b = a    # 浅浅拷贝
c = copy.copy(a) # 深浅拷贝:父对象(一级目录,如1,2)是深拷贝,子对象(非一级目录,如3,4)为浅拷贝
d = copy.deepcopy(a) # 永为深拷贝
# 如下对a父对象做变动
a.append(5)
print("变动a父对象后的结果:")
print(a)
print(b)
print(c)
print(d)

# 对a子对象做变动:
a[2][0] = 5

print("变动a子对象后的结果:")
print(a)
print(b)
print(c)
print(d)

输出结果:
变动a父对象后的结果:
[1, 2, [3, 4], 5]
[1, 2, [3, 4], 5]
[1, 2, [3, 4]]
[1, 2, [3, 4]]
变动a子对象后的结果:
[1, 2, [5, 4], 5]
[1, 2, [5, 4], 5]
[1, 2, [5, 4]]
[1, 2, [3, 4]]

结论:
分析可得,copy()父对象改变,拷贝结果依然不变,子对象改变,拷贝结果中对应的子对象会跟着改变;
而deepcopy()父对象和子对象的改变不会关联到拷贝的结果。
通常我们口头所说的大多是“deepcopy”.

补充:
切片提取全部的方式也算是“深拷贝”!!!

走过的坑:

temp = input("请输入字符串参数:")
list1 = list(temp)
print("list1:", list1)
list2 = list1
print("list2:", list2)
list1.reverse()
list3 = list1
print("list3", list3)
if (list2 == list3):
    print("是回文联")
    print("真正的list2值:", list2)
    print("真正的list3值:", list3)
else:
    print("不是回文联")
    

结果:
在这里插入图片描述

解释:此处是判断一个回文联的例子,回文联:顺序和倒序一样,如:上海自来水来自海上
这个案例就充分展示了a=b为浅复制。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值