91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python字典中深淺拷貝與循環方式的示例分析

發布時間:2021-06-11 15:28:18 來源:億速云 閱讀:141 作者:小新 欄目:開發技術

這篇文章主要介紹Python字典中深淺拷貝與循環方式的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

本節內容

  • 深淺拷貝

  • 循環方式

  • 字典常用方法總結

一、深淺拷貝

列表、元組、字典(以及其他)

對于列表、元組和字典而言,進行賦值(=)、淺拷貝(copy)、深拷貝(deepcopy)而言,其內存地址是變化不通的。

賦值(=)

賦值只是創建一個變量,該變量指向原來的內存地址

>>> name1 = ['a','b',['m','n'],'c']
>>> name2 = name1
#輸出結果,兩個內存地址是一樣的
>>> print(id(name1),',',id(name2))
50077256 , 50077256

 如圖所示:

Python字典中深淺拷貝與循環方式的示例分析

 淺拷貝(copy)

淺拷貝是指在內存地址中,只拷貝出第一層的內存的地址,所以拷貝變量和被拷貝變量的內存地址是不一樣的(列表、元組和字典中的copy()方法都是淺拷貝)

>>> import copy
>>> name1 = ['a','b',['m','n'],'c']
#淺copy
>>> name2 = copy.copy(name1)
>>> print(name1,',',id(name1))
['a', 'b', ['m', 'n'], 'c'] , 50228296
>>> print(name2,',',id(name2))
['a', 'b', ['m', 'n'], 'c'] , 50920008
#修改列表中的元素
>>> name1[0] = 'h'
>>> name1[2][0] = 'M'
>>> print(name1,',',id(name1))
['h', 'b', ['M', 'n'], 'c'] , 50228296
>>> print(name2,',',id(name2))
['a', 'b', ['M', 'n'], 'c'] , 50920008

 如圖所示:

Python字典中深淺拷貝與循環方式的示例分析

注:因為淺拷貝只拷貝了第一層,所以拷貝的變量和被拷貝的變量的第二層的列表的內存地址是一樣的。

>>> import copy
>>> name1 = ['a','b',['m','n'],'c']
>>> name2 = copy.copy(name1)
>>> name1[0] = 'h'
>>> name1[2][0] = 'M'
#name1[2][0]的內存地址和name2[2][0]內存地址是一樣的
>>> print(name1,id(name1),id(name1[2][0]))
['h', 'b', ['M', 'n'], 'c'] 50209800 13820904
>>> print(name2,id(name2),id(name2[2][0]))
['a', 'b', ['M', 'n'], 'c'] 50891144 13820904

淺拷貝的三種表現形式:

1.用copy模塊中的copy方法(跟上面的一樣)

2.用切片的方式:

>>> name1 = ['a','b',['m','n'],'c']
>>> name2 = name1[:]

 3.用列表自帶的方法:

>>> name1 = ['a','b',['m','n'],'c']
>>> name2 = name1.copy()

深拷貝(deepcopy)

深拷貝是指在內存中將所有的數據重新創建一份。

注:排除最后一層,即python內部對字符串和數字的優化

>>> import copy
>>> name1 = ['a','b',['m','n'],'c']
#深拷貝
>>> name2 = copy.deepcopy(name1)
>>> print(name1,',',id(name1))
['a', 'b', ['m', 'n'], 'c'] , 50142472
>>> print(name2,',',id(name2))
['a', 'b', ['m', 'n'], 'c'] , 50942280
>>> name1[0] = 'h'
>>> name1[2][0] = 'M'
>>> print(name1,id(name1),id(name1[2][0]))
['h', 'b', ['M', 'n'], 'c'] 50142472 10937320
>>> print(name2,id(name2),id(name2[2][0]))
['a', 'b', ['m', 'n'], 'c'] 50942280 4896280

 如圖所示:

Python字典中深淺拷貝與循環方式的示例分析

 注:因為深拷貝會拷貝到最后一層的內存地址,所以最后一層的內存地址是不通

二、循環方式

方法1、

for key in info:
  print(key,info[key])

 方法2、

for k,v in info.items(): #會先把dict轉成list,數據量大時莫用
  print(k,v)

 小結:

①方法1的效率比方法2的效率高很多

②方法1是直接通過key取value

③方法2是先把字典轉換成一個列表,再去取值

④當數據量比較大的時候,用第二種方法時,字典轉換成列表的這個過程需要花大量的時間老轉換,當然數據量不大,沒有關系,效率差不多

字典常用方法

Python字典中深淺拷貝與循環方式的示例分析

以上是“Python字典中深淺拷貝與循環方式的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

无极县| 新绛县| 土默特右旗| 兴海县| 马公市| 大荔县| 峨眉山市| 偃师市| 斗六市| 凭祥市| 通道| 泰顺县| 普宁市| 南和县| 扶沟县| 尼玛县| 马边| 加查县| 德江县| 泸定县| 若羌县| 南华县| 定边县| 当阳市| 绥棱县| 商洛市| 威海市| 古田县| 青海省| 增城市| 邳州市| 伊宁县| 凤阳县| 囊谦县| 武川县| 上思县| 承德县| 根河市| 江陵县| 北流市| 晴隆县|