變數(variables)的身份(identity) | Python
在 Python 中, 變數的身份(identity) 是指變數所指向的記憶體地址。每個在 Python 中創建的對象都有一個唯一的身份標識,這個標識是根據對象在記憶體中的位置而定的。變數的身份實際上就是這個記憶體地址。
你可以使用id()函數來獲取一個對象的身份。這個函數返回一個唯一的識別碼,表示對象在記憶體中的位置。
範例:
在下面的例子中,id(a)和id(b)將會返回相同的數值,表示變數a和b指向相同的記憶體地址,即它們具有相同的身份。
a = [1, 2, 3]
print(id(a)) # 印出a的身份
b = a
print(id(b)) # 印出b的身份,與a相同
在下面的例子中,id(a)和id(b)將會返回不同的記憶體地址,雖然他們的值是相同的,但是他們的id()卻是不一樣的
a = [1, 2, 3]
b = [1, 2, 3]
print(id(a)) # 印出a的身份
print(id(b)) # 印出b的身份,雖然值和a相同但是id()卻是不同的
深入理解變數(variables)的身份(identity)的優勢
在Python中,我們可以透過身份(identity)來查看記憶體的位置,所以我們可以查看 原始型別(Primitive Types)和引用型別(Reference Types) 的記憶體位置,可以讓我們更深入去理解Python語言的特性。
以下我們將用範例來解釋之間的差異:
原始型別(Primitive Types)的身份(identity)
- 我們可以發現,在原始型別中,如果變數的值相同的話,記憶體的位置會相同
- 原始型別中變數的值不同,記憶體位置才會不同
name1 = 'Tom'
name2 = 'Tom'
print(name1 == name2) # True
print(name1 is name2) # True
# 我們查看2個原始型別的id()
print(id(name1)) # 140160478972208
print(id(name2)) # 140160478972208
引用型別(Reference Types)的身份(identity)
- 我們可以發現,在引用型別中,即使變數的值相同,記憶體的位置也會不相同
- 引用型別中的變數不管值有沒有相同,記憶體位置都會不一樣
person1 = { 'name': 'Tom', 'age': 18 }
person2 = { 'name': 'Tom', 'age': 18 }
print(person1 == person2) # True
print(person1 is person2) # False
# 我們查看2個引用型別的id()
print(id(person1)) # 140162227009088
print(id(person2)) # 140162227060032
結論:
當我們在實際的開發場景中,往往因為不熟悉Python的 變數(variables)的身份(identity) 和 原始型別(Primitive Types)和引用型別(Reference Types) 的差別,在 if else statement 的判斷中,寫出非常隱蔽的bug,因此深入的去理解Python變數的基礎特性,對於往後開發有非常大的幫助。
Tags