日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python中的浅拷贝与深拷贝——copy()

發布時間:2024/8/26 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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()的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。