Python-直接赋值、深拷贝、浅拷贝

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始终无变化
发布了101 篇原创文章 · 获赞 46 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/weixin_40539952/article/details/104114536