这篇文章主要介绍python切片是不是属于浅拷贝和在python中浅拷贝切片的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
文章插图
1、浅拷贝说明
浅拷贝,拷贝的是一个父对象,就是一个外围对象的本身,而不会拷贝对象的里面的子集 。内部的元素都只是拷贝了一个引用而已 。也就是,把对象复制一遍,但是该对象中引用的其他对象不会复制 。python中切片使用的[:]和.copy()方法都属于“浅拷贝”,只拷贝最外层元素,内层嵌套元素则通过引用方式共享,而非独立分配内存 。
b = a[:] print(b)输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(id(a))【python切片是不是属于浅拷贝?在python中浅拷贝切片的方法】输出:41946376
print(id(b))输出:41921864
或
b = a.copy()print(b)输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(id(a))输出:39783752
print(id(b))输出:39759176
2、切片拷贝实例
下面会通过列表举一个例子,列表切片后会是一个新的列表,同样会用新的内存地址进行存储 。当取出切片的结果时,它是一个独立对象,也就是说每一次切片操作的返回结果都是一个完全独立的新的序列,因此,可以将其用于赋值操作,也可以用于其它传递值的场景 。但是,切片只是浅拷贝,它拷贝的是原列表中元素的引用,所以,当存在变长对象的元素时,新列表将受制于原列表 。
Li = [1, 2, 3, 4,5]L1 = Li[::]Li == Ls# True
id(Li) == id(Ls)# False
Li.append(Li[2:4])# [1, 2, 3, 4, 5[3, 4]]
Ls.extend(Ls[2:4]) # [1, 2, 3, 4, 3, 4,5]
# 下例等价于判断li长度是否大于8
if(Li[8:]): print("not empty")else: print("empty")# 切片列表受制于原列表
L = [1,[1,1],2,3]L1= L[:2]# [1, [1, 1]]
L[1].append(1)# [1, [1, 1, 1], 2, 3]
L1
# [1, [1, 1, 1]]
以上就是为大家分享的python切片是不是属于浅拷贝和在python中浅拷贝切片的方法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解 。
推荐阅读
- 如何在NumPy下索引与切片?索引与切片的用法
- python如何替换字符串的内容? 一个函数轻松实现!
- Python如何绘制属于你的世界地图?Python绘制地图的方法
- Python如何按列合并多个文件?Python按列合并多个文件的方法
- 如何获取python字符串中最后一个字符?python获取字符串最后一个字符的方法
- 如何通过python来识别回文数?python回文数代码编写方法
- 大学生学python有用吗?学习python到底有没有用?
- 只有Python能安装库吗?只有Python怎么下第三方库
- 苹果手机的Python怎么运行?Python如何在苹果手机上使用
- Python怎么显示图片?Python如何将图片显示