您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關深入淺析Python中動態類型的實現原理,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
在python中,我們使用變量時,并沒有聲明變量的存在和類型。類型是在運行過程中自動決定的。
a = 3
python將會執行三步去完成上面這個請求。
1.創建一個對象代表3
2.創建一個變量a,如果a未創建。
3.將變量a與對象3相連接。
可以將變量a看作對象3的一個引用。
a = 3
b = a
多個變量可以指向同一個對象,在Python中叫共享引用。
Python在每個對象中保持了一個計數器,用于記錄當前指向該對象的引用的數目,一旦計數器被設置為0,該對象的內存空間就會自動回收。
原處修改對象
由于共享引用的存在,有一些對象和操作會在原處修改對象。
Python中對象可分為可變類型對象和不可變類型對象。
可變對象:列表,字典
不可變對象:數字,字符串,元組
如果變量是不可變對象的引用,對變量名的修改不會影響其他變量,而是直接連接到修改的對象。
a = 3
b = a
print(a)# 3
print(b)# 3a = 4
print(a)# 4
print(b)# 3
如果變量是可變對象的引用,對變量名的修改會影響其他變量。
a = [1,2,3]
b = a
print(a)# [1, 2, 3]
print(b)# [1, 2, 3]a[0] = 4
print(a)# [4, 2, 3]
print(b)# [4, 2, 3]
拷貝
所以當你需要創建一個與原列表一樣同時又獨立于原列表的列表時,可以使用拷貝。
下面介紹最常用的兩種。
a = [1,2,3]
b = a[:]
print(a)# [1, 2, 3]
print(b)# [1, 2, 3]a[0] = 4
print(a)# [4, 2, 3]
print(b)# [1, 2, 3]
此時b引用的是a所引用的對象的拷貝。a,b指向不同的內存區域。
在字典和集合中,無法使用這種方法。
可以使用標準庫中的copy模塊
import copy
a = [1,2,[3]]
b = copy.copy(a)# 淺拷貝
c = copy.deepcopy(a)# 深拷貝a[0] = 0
a[-1].append(4)print(a)# [0, 2, [3, 4]]
print(b)# [1, 2, [3, 4]]
print(c)# [1, 2, [3]]
關于深入淺析Python中動態類型的實現原理就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。