python中的浅拷贝与深拷贝——copy()
生活随笔
收集整理的這篇文章主要介紹了
python中的浅拷贝与深拷贝——copy()
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1、copy()方法用來拷貝列表元素
1 a = [1, 2, 3] 2 # 拷貝 3 b = a.copy() 4 print('a = ', a, '\n', 'b = ', b) 5 6 # 執行結果: 7 # a = [1, 2, 3] 8 # b = [1, 2, 3]?
2、copy()方法執行的是深拷貝,b = a.copy(),b將指代內存中的另一個與a不同的位置, 在不存在列表嵌套的情況下,在a或者b任何一方的任何操作對另一方沒有影響
1 a = [1, 2, 3] 2 # 拷貝 3 b = a.copy() 4 print('a = ', a, '\n', 'b = ', b) 5 6 #修改a[0]和b[1]的值 7 a[0] = 0 8 b[1] = 1 9 print('a = ', a, '\n', 'b = ', b) 10 11 12 # 執行結果: 13 # a = [1, 2, 3] 14 # b = [1, 2, 3] 15 16 # 修改a[0]和b[1]后: 17 # a = [0, 2, 3] 18 # b = [1, 1, 3]?
3、存在列表嵌套情況下的copy(),結果與情況2有不同
1 a = [1, [2, 2, 2], 3] 2 # 拷貝 3 b = a.copy() 4 print('a = ', a, '\n', 'b = ', b) 5 6 #修改a[1][0]、b[1][2]和b[2]的值 7 a[1][0] = 0 8 b[1][2] = 0 9 b[2] = 1 10 print('a = ', a, '\n', 'b = ', b) 11 12 13 # 執行結果: 14 # a = [1, [2, 2, 2], 3] 15 # b = [1, [2, 2, 2], 3] 16 17 # 修改a[1][0]、b[1][2]和b[2]后: 18 # a = [1, [0, 2, 0], 3] 19 # b = [1, [0, 2, 0], 1]可以看見,凡是對列表內嵌套的列表的值進行了修改,那么無論修改a還是b都會對另一方有影響,如修改a[1][0]和b[1][2]則a和b的[1][0]和[1][2]位置的值都被修改了,而非嵌套列表的值則無影響,如修改b[2]對a[2]的值沒有影響。
出現這種情況的原因是,主列表a只存儲了嵌套列表在內存中的地址,而不是嵌套列表的數據,copy()方法也只是將該地址復制到b中,但是由于a和b的這兩個地址都指向內存的同一區域,故對該區域的任何操作都會對a和b有共同影響
?
4、有一個copy模塊提供與python內置的copy()方法相同的功能
1 import copy 2 3 a = [1, [2, 2, 2], 3] 4 # 調用copy模塊的copy函數 5 b = copy.copy(a) 6 print('a = ', a, '\n', 'b = ', b) 7 8 #修改a[1][0]、b[1][2]和b[2]的值 9 a[1][0] = 0 10 b[1][2] = 0 11 b[2] = 1 12 print('a = ', a, '\n', 'b = ', b) 13 14 15 # 執行結果: 16 # a = [1, [2, 2, 2], 3] 17 # b = [1, [2, 2, 2], 3] 18 19 #修改a[1][0]、b[1][2]和b[2]后: 20 # a = [1, [0, 2, 0], 3] 21 # b = [1, [0, 2, 0], 1]?
5、可使用copy模塊的deepcopy()方法進行徹底的深度拷貝,即不管有沒有列表嵌套,在任何一方的任何操作都對另一方沒有影響
1 import copy 2 3 a = [1, [2, 2, 2], 3] 4 # 調用copy模塊的deepcopy函數 5 b = copy.deepcopy(a) 6 print('a = ', a, '\n', 'b = ', b) 7 8 #修改a[1][0]、b[1][2]和b[2]的值 9 a[1][0] = 0 10 b[1][2] = 0 11 b[2] = 1 12 print('a = ', a, '\n', 'b = ', b) 13 14 15 # 執行結果: 16 # a = [1, [2, 2, 2], 3] 17 # b = [1, [2, 2, 2], 3] 18 19 #修改a[1][0]、b[1][2]和b[2]后: 20 # a = [1, [0, 2, 2], 3] 21 # b = [1, [2, 2, 0], 1]?
參考自:https://blog.csdn.net/lhw413/article/details/72807834
轉載于:https://www.cnblogs.com/latup/p/9573051.html
總結
以上是生活随笔為你收集整理的python中的浅拷贝与深拷贝——copy()的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: unittest框架学习笔记
- 下一篇: python学习笔记 day20 序列化