快捷搜索:  汽车  科技

python列表的浅拷贝和深拷贝(Python的浅拷贝与深拷贝)

python列表的浅拷贝和深拷贝(Python的浅拷贝与深拷贝)# 元组不可变,不支持元素修改 # TypeError: 'tuple' object does not support item assignment # x[0][0] = 4 # x[0][1] = 5 # x[0][2] = 6 # 但可对元组进行整体替换 x[0] = (11 22 33) x[1][0] = 4 x[1][1] = 5 x[1][2] = 6因为元组元素的不可变特性,只可进行整体替换; 整体替换时,修改的是x[0],即x的第一层,不会影响y[0],即y的第一层。元组与列表的拷贝x[0] = 2 x[1] = 6.28 x[2] = 'python' x[3][0] = 4 x[3][1] = 5 x[3][2] = 6所以,对x每一层的修改,均不影响y。深拷贝x = [(1 2 3) [1 2 3]] y =

一、列表的浅拷贝:只拷贝了列表的第一层,从第二层起依然共享。

x = [1 3.14 'abc' [1 2 3]] y = x.copy()

python列表的浅拷贝和深拷贝(Python的浅拷贝与深拷贝)(1)

浅拷贝

x[0] = 2 x[1] = 6.28 x[2] = 'python' x[3][0] = 4 x[3][1] = 5 x[3][2] = 6

所以,对x第一层的修改,不影响y,但对x第二层的修改则同时也修改了y。

python列表的浅拷贝和深拷贝(Python的浅拷贝与深拷贝)(2)

浅拷贝

二、列表的深拷贝:对列表的每一层均进行拷贝。

import copy x = [1 3.14 'abc' [1 2 3]] y = copy.deepcopy(x)

python列表的浅拷贝和深拷贝(Python的浅拷贝与深拷贝)(3)

深拷贝

x[0] = 2 x[1] = 6.28 x[2] = 'python' x[3][0] = 4 x[3][1] = 5 x[3][2] = 6

所以,对x每一层的修改,均不影响y。

python列表的浅拷贝和深拷贝(Python的浅拷贝与深拷贝)(4)

深拷贝

三、注意元组与列表的差异

x = [(1 2 3) [1 2 3]] y = x.copy()

对列表的浅拷贝,无论第二层是列表还是元组,均进行了共享。

python列表的浅拷贝和深拷贝(Python的浅拷贝与深拷贝)(5)

元组与列表的拷贝

# 元组不可变,不支持元素修改 # TypeError: 'tuple' object does not support item assignment # x[0][0] = 4 # x[0][1] = 5 # x[0][2] = 6 # 但可对元组进行整体替换 x[0] = (11 22 33) x[1][0] = 4 x[1][1] = 5 x[1][2] = 6

因为元组元素的不可变特性,只可进行整体替换; 整体替换时,修改的是x[0],即x的第一层,不会影响y[0],即y的第一层。

python列表的浅拷贝和深拷贝(Python的浅拷贝与深拷贝)(6)

总结:浅拷贝只拷贝第一层;深拷贝则拷贝所有层;对于元组,在拷贝时看似共享,实则在修改时即触发裂变,互不影响。

我对你的喜欢说深也深,说浅也浅,深在我们经常在用图文交流,浅在我们从未谋面。

猜您喜欢: