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

歡迎訪問 生活随笔!

生活随笔

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

python

Python基础:对象的深拷贝和浅拷贝的区别

發布時間:2024/10/8 python 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python基础:对象的深拷贝和浅拷贝的区别 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Python基礎:對象的深拷貝和淺拷貝的區別

  • 1 變量與對象
  • 2 不可變對象與可變對象
  • 3 直接賦值
  • 4 淺拷貝
  • 5 深拷貝
  • 參考文獻

1 變量與對象

  • 對象:內存中存儲數據的實體,有明確的類型。在Python中,一切都是對象,函數也是對象。
  • 變量:指向對象的指針,對對象的引用。作為弱類型語言,Python中變量是沒有類型的。

2 不可變對象與可變對象

  • 不可變對象:對象對應內存中的值不會變,因此如果指向該對象的變量被改變了,會重新開辟一片內存,變量指向這個新的內存,包括int、float、str、tuple。
  • 可變對象:對象對應內存中的值可以改變,因此變量改變后,該對象也會改變,即原地修改,如list、dict、set等。

對于不可變對象,所有指向該對象的變量在內存中共用一個地址:

a = 1 b = 1 c = a + 0 # 使用id函數查看三個變量的內存地址 flag = id(a) == id(b) and id(a) == id(c) print(id(a)) # 1986179296 print(id(b)) # 1986179296 print(id(c)) # 1986179296 print(flag) # True

3 直接賦值

在Python中對象賦值實際上是對象的引用。當創建一個對象,然后把它賦給另一個變量的時候,并沒有拷貝這個對象,而只是拷貝了這個對象的引用。

直接賦值默認淺拷貝,只傳遞對象的引用,原始列表改變,被賦值的b也會做相同的改變

# 直接賦值 # a和b引用相同的list,所以會相互改變 alist = [1, 2, 3, ['a','b']] b = alist alist.append(5) alist[3].append('c') print("List a:", alist) print("List b:", b)

4 淺拷貝

淺拷貝沒有拷貝子對象,原始數據改變時,子對象會改變。

# 淺拷貝 import copyalist = [1, 2, 3, ['a', 'b']]# 沒有拷貝子對象,公用一個可變list對象 c = copy.copy(alist)# 非可變子對象,所以不會改變c alist.append(5)# 可變子對象,會改變c alist[3].append('ccc')print("List a:", alist) print("List c:", c)

5 深拷貝

深拷貝包含對象里面的對象,所以原始對象的改變不會造成深拷貝對象的改變。

# 深拷貝 import copyalist = [1, 2, 3, ['a', 'b']] # alist和d完全獨立所有對象 d = copy.deepcopy(alist) alist.append(5) alist[3].append('ccc')print("List a:", alist) print("List d:", d)

參考文獻

  • https://www.cnblogs.com/xueli/p/4952063.html
  • 總結

    以上是生活随笔為你收集整理的Python基础:对象的深拷贝和浅拷贝的区别的全部內容,希望文章能夠幫你解決所遇到的問題。

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