这篇文章主要介绍python切片是不是属于浅拷贝和在python中浅拷贝切片的方法,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

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,转载请注明出处!