Python列表赋值,复制,深拷贝以及5种浅拷贝详解
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python列表赋值,复制,深拷贝以及5种浅拷贝详解,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1864字,纯文字阅读大概需要3分钟。
内容图文
Python列表赋值,复制,深拷贝以及5种浅拷贝详解
概述
在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值、复制、浅拷贝、深拷贝等绕口的名词到底有什么区别和作用呢?
列表赋值
# 定义一个新列表
l1 = [1, 2, 3, 4, 5]
# 对l2赋值
l2 = l1
print(l1)
l2[0] = 100
print(l1)
示例结果:
[1, 2, 3, 4, 5]
[100, 2, 3, 4, 5]
可以看到,更改赋值后的L2后L1同样也会被更改,看似简单的“复制”,在Python中,列表属于可变对象,而对可变对象的复制其实就是将列表的内存空间类似C中的指针再次指向新的变量名,而不是诸如字符串这种不可变对象在复制时会创建新的内存空间进行赋值。即此时L1和L2指向的是同一片内存空间,那么怎么实现真正复制呢?
浅拷贝
当列表中的元素为不可变对象时,我们可以用以下方法对列表进行赋值:
import copy
# 定义一个新列表
L0 = [1, 2, 3, 4, 5]
print(L0)
print('-'*40)
利用切片
L1 = L0[:]
L1[0] = 100
print(L0)
Python资源分享qun:784,758,214 内有安装包,学习视频资料
利用模块copy
import copy
L2 = copy.copy(L0)
L2[0] = 100
print(L0)
利用list()
L3 = list(L0)
L3[0] = 100
print(L0)
利用列表方法extend
L4 = []
L4.extend(L0)
L4[0] = 100
print(L0)
利用列表推导
L5 = [i for i in L0]
L5[0] = 100
print(L0)
可以看到最终的打印结果都是[1, 2, 3, 4, 5]
,我们成功进行了列表的复制,但是为了条件需要是列表中元素为不可变对象呢? 因为如果列表中的元素为可变对象,在复制时有会发生对象的引用,而不是新建内存空间进行引用,比如:
L0 = [1, 2, [3], 4, 5]
print(L0)
L2 = L0[:]
L2[2][0] = 100
print(L0)
示例结果:
[1, 2, [3], 4, 5]
[1, 2, [100], 4, 5]
可以看到,当列表L0中含有可变对象时,对复制后的L1进行改变其中可变对象元素L2[2]时,L0中的可变对象L0[2]也发生了改变,那么怎么实现真正的完全的拷贝呢?
深拷贝
利用copy模块中的deepcopy进行深拷贝:
import copy
L0 = [1, 2, [3], 4, 5]
print(L0)
L2 = copy.deepcopy(L0)
L2[2][0] = 100
print(L2)
print(L0)
Python资源分享qun:784,758,214 内有安装包,学习视频资料
示例结果:
[1, 2, [100], 4, 5]
[1, 2, [3], 4, 5]
内容总结
以上是互联网集市为您收集整理的Python列表赋值,复制,深拷贝以及5种浅拷贝详解全部内容,希望文章能够帮你解决Python列表赋值,复制,深拷贝以及5种浅拷贝详解所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。