Python学习之路-Python中列表的复制拷贝

最近老师给了道题,题目是这样的
将一个列表的数据复制到另一个列表中
然后一开始觉得就是简单的复制,直接list1 = list2就ok了,后来觉得好像不对,似乎看到过copy这个函数

于是我搜了一下…
然后发现了除了直接赋值之外的深拷贝和浅拷贝…
于是新的疑问来了
他们有什么区别???
干想肯定是没用的,来实际操作一下康康

import copy

List = [1, 2, 4, 12, [4, 5, 6, 33], 10]
# 直接赋值
L1 = List
# 浅拷贝
L2 = copy.copy(List)
# 浅拷贝
L3 = List[:]
# 深拷贝
L4 = copy.deepcopy(List)

print(List)
print(L1)
print(L2)
print(L3)
print(L4)
运行结果如下:
[1, 2, 4, 12, [4, 5, 6, 33], 10]
[1, 2, 4, 12, [4, 5, 6, 33], 10]
[1, 2, 4, 12, [4, 5, 6, 33], 10]
[1, 2, 4, 12, [4, 5, 6, 33], 10]
[1, 2, 4, 12, [4, 5, 6, 33], 10]

??也没发现有啥不一样啊
ok,不要慌,来我们改一下子列表的值
然后再打印一下几种拷贝

# 在List最后加上一个数
List.append(100)
运行的结果:
[1, 2, 4, 12, [4, 5, 6, 33], 10, 100]
[1, 2, 4, 12, [4, 5, 6, 33], 10, 100]
[1, 2, 4, 12, [4, 5, 6, 33], 10]
[1, 2, 4, 12, [4, 5, 6, 33], 10]
[1, 2, 4, 12, [4, 5, 6, 33], 10]

?好的这次直接赋值的L1有了变化,但是还是看不出来深拷贝和浅拷贝有啥区别
ok我们再改一下,这次我们来改变一下List列表中的列表的值

# 在List中的列表末尾加上一个数
List[4].append(777)
运行的结果:
[1, 2, 4, 12, [4, 5, 6, 33, 777], 10, 100]
[1, 2, 4, 12, [4, 5, 6, 33, 777], 10, 100]
[1, 2, 4, 12, [4, 5, 6, 33, 777], 10]
[1, 2, 4, 12, [4, 5, 6, 33, 777], 10]
[1, 2, 4, 12, [4, 5, 6, 33], 10]

不错这次终于出现不同

就根据结果总的来说:
1.直接赋值的列表,会根据原始列表的改变而改变.
2.浅拷贝的列表,没有拷贝子对象,对子对象使用原始引用.
3.深拷贝,完全复制对象,以及其中的所有元素,原始列表的改变不会造成深拷贝里任何数据的改变

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值