这篇文章主要介绍python切片是不是属于浅拷贝和在python中浅拷贝切片的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
1、浅拷贝说明
浅拷贝,拷贝的是一个父对象,就是一个外围对象的本身,而不会拷贝对象的里面的子集。内部的元素都只是拷贝了一个引用而已。也就是,把对象复制一遍,但是该对象中引用的其他对象不会复制。python中切片使用的[:]和.copy()方法都属于“浅拷贝”,只拷贝最外层元素,内层嵌套元素则通过引用方式共享,而非独立分配内存。
b = a[:] print(b)
输出:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(id(a))
输出: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中浅拷贝切片的方法了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。
更多python相关文章请访问分类:python
【版权声明】本文图文出自大盘站@dapan.cc,转载请注明出处!