Python動態型別

2022-09-11 17:12:13 字數 1500 閱讀 1899

在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)# 3

a = 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

print(a)# [0, 2, [3, 4]]

print(b)# [1, 2, [3, 4]]

print(c)# [1, 2, [3]]

淺拷貝中可變物件中巢狀的可變物件的引用還是原來的引用。

深拷貝可以拷貝巢狀的物件結構。

Python 動態型別

動態型別 dynamic typing 是python另乙個重要的核心概念。我們之前說過,python的變數 variable 不需要宣告,而在賦值時,變數可以重新賦值為任意值。這些都與動態型別的概念相關。1.動態型別 在我們接觸的物件中,有一類特殊的物件,是用於儲存資料的。常見的該類物件包括各種數...

python動態型別

python是動態語言。不需要事先宣告變數型別,同一變數可以被賦值為不同的物件型別。不可變型別 不可變型別,物件一旦建立不可修改。整數型別 int 浮點數型別 float 複數型別 complex 字串型別 str 元祖型別 tuple 集合型別 set,都屬於不可變型別。下面通過變數賦值的過程理解...

Python 動態型別定義

動態型別以及由它提供的多型性,這個概念無疑是python語言的簡潔性和靈活性的基礎。在python中,並不會宣告指令碼中使用的物件的確切的型別。事實上,程式甚至可以不在意特定的型別 相反地,它們能夠自然地適用於更廣泛的場景下,因為動態型別是python語言靈活性的根源。變數建立 乙個變數,例如a,當...