In [1]: # 第一种,直接赋值
In [2]: a = [1,2,[3,4]]
In [3]: b = a
In [4]: print(a,b)
[1, 2, [3, 4]] [1, 2, [3, 4]]
In [5]: a.append(5)
In [6]: print(a,b)
[1, 2, [3, 4], 5] [1, 2, [3, 4], 5]
In [7]: # 原对象改变,赋值对象同样改变
In [8]: # 第二种,浅拷贝
In [9]: import copy
In [10]: a = [1,2,[3,4]]
In [11]: c = copy.copy(a)
In [12]: print(a,c)
[1, 2, [3, 4]] [1, 2, [3, 4]]
In [13]: a.append(5)
In [14]: print(a,c)
[1, 2, [3, 4], 5] [1, 2, [3, 4]]
In [16]: # copy浅拷贝,拷贝a中的数据,但是不拷贝a中的子对象,如列表
In [17]: a[2]
Out[17]: [3, 4]
In [18]: a[2].append(6)
In [19]: print(a,c)
[1, 2, [3, 4, 6], 5] [1, 2, [3, 4, 6]]
In [20]: # 没有拷贝子对象,而是直接引用源对象中的子对象,所以原对象中子对象更改,拷贝后数据也更改
In [21]: # 第三种,深拷贝
In [22]: a = [1,2,[3,4]]
In [23]: d = copy.deepcopy(a)
In [24]: print(a,d)
[1, 2, [3, 4]] [1, 2, [3, 4]]
In [25]: a.append(5)
In [26]: print(a,d)
[1, 2, [3, 4], 5] [1, 2, [3, 4]]
In [27]: a[2].append(6)
In [28]: print(a,d)
[1, 2, [3, 4, 6], 5] [1, 2, [3, 4]]
In [29]: # 深拷贝完全拷贝,包括子对象,所以d始终无变化
Python-直接赋值、深拷贝、浅拷贝
猜你喜欢
转载自blog.csdn.net/weixin_40539952/article/details/104114536
今日推荐
周排行