Python中的直接赋值、深拷贝、浅拷贝

1.直接赋值

直接赋值只是传对象的引用而已,相当于两个变量同时指向一个地方,所以不论这两个变量哪一个改变,他们同时指向的地方都会改变。

list_1 = [1,2,3,[4,5]]
list_2 = list_1
print(list_1,list_2)
#  对list_2的内容赋值
list_2[0] = 0
print(list_1,list_2)


2.浅拷贝  copy()

当使用浅拷贝时,只是拷贝了最外围的对象本身,嵌套的内部元素都只是拷贝了一个引用而已。所以外围元素可以独立改变,内部元素其中一个赋值就会引起全部改变。

from copy import copy
list_1 = [1,2,3,[4,5]]
list_2 = copy(list_1)
print('初始情况   : ',list_1,list_2)
#  改变外围因素例如list_2中的1、2、3  发现list_1没有改变
list_2[0] = 0
print('改变外围因素:',list_1,list_2)
#  改变内部因素例如list2中的[4,5]  发现list_1改变了  因为内部元素浅拷贝只是传引用
list_2[3][0] = 0
print('改变内部因素:',list_1,list_2)


3.深拷贝  deepcopy()

对外围和内部元素都进行了拷贝对象本身,而不是对象的引用。简而言之,全部复制,相互独立,一套带走……

from copy import deepcopy
list_1 = [1,2,3,[4,5]]
list_2 = deepcopy(list_1)
print('初始情况   : ',list_1 ,list_2)
#  改变外围因素  发现list_1没有改变
list_2[0] = 0
print('改变外围因素:',list_1,list_2)
#  改变内部因素  发现list_1没有改变
list_2[3][0] = 0
print('改变内部因素:',list_1,list_2)


    总的来说,赋值就是传引用,一个改变就都改变。浅拷贝顾名思义拷贝得不彻底,一些嵌套的内部元素其中一个改变也会都改变。深拷贝厉害了,完全拷贝,相互对立,一切安好,互不干扰。

猜你喜欢

转载自blog.csdn.net/Jamesjjjjj/article/details/80858317