Python是一種動態語言,允許開發者在運行時動態地為變量分配內存,但Python中的數據類型分為可變類型和不可變類型,對它們的使用有着很大的不同。Python中的不可變數據類型包括:數字、字符串、元組。這篇文章將從多個方面詳細探討這些不可變數據類型的特性。
一、數字類型
Python數字類型是不可變類型的典型代表,它包括整型(int)、浮點型(float)、複數類型(complex)。在Python的廣泛應用中,數字類型是廣泛使用的一種不可變數據類型。
對於數字類型,我們需要注意以下幾個方面:
1. 數字類型的不可變性
a = 1
b = a
print(id(a))
print(id(b)) # id(a)和id(b)是相同的
a += 1
print(id(a)) # id(a)改變了,因為數字類型是不可變的
print(id(b)) # id(b)不變,因為數字類型是不可變的
從以上代碼可以看出,數字類型是不可變的。在修改a的值時,實際上是創建了一個新的對象,而將新對象的引用賦值給了a這個變量。
2. 整型對象池
Python中對於整型數字,有一個對象池的概念。Python會預先將-5到256的整型數字(的對象)創建好,並且存入對象池中,當一個變量被賦值為這個範圍內的整型數字時,會將該變量指向對象池中的那個對象。
a = 10
b = 10
print(id(a))
print(id(b)) # 輸出的id相同
a = -5
b = -5
print(id(a))
print(id(b)) # 輸出的id相同
a = 257
b = 257
print(id(a))
print(id(b)) # 輸出的id不同
以上代碼中,最後一段代碼輸出的id不同,是因為創建了超出預設範圍的整型數字。
3. 常量摺疊
在Python中,當一個表達式涉及到數字時,編譯器會自動進行常量摺疊。即將簡單表達式一次求值並進行編譯。
a = 12 * 3
print(a) # 輸出36
b = 'a' * 3
print(b) # 輸出'aaa'
以上代碼中,a和b的值在編譯時就已經確定,而不必在運行時再進行計算。
二、字符串類型
Python中的字符串是一種不可變數據類型。這意味着字符串不能被修改、增加或刪除。在實際應用中,字符串是使用最為廣泛的數據類型之一。
對於字符串類型,我們需要注意以下幾個方面:
1. 字符串的不可變性
a = 'hello world'
print(id(a))
a = 'hi world'
print(id(a)) # id(a)發生了改變,因為字符串是不可變的
從以上代碼可以看出,字符串是不可變的。在修改字符串時,實際上是創建了一個新的字符串對象,而將新對象的引用賦值給了a這個變量。
2. 字符串方法返回新對象
字符串提供了眾多的方法操作,比如split、replace、upper等等。這些方法的共同特點是,它們都會返回一個新的字符串對象,而不會直接修改原字符串。
a = 'hello world'
b = a.upper()
print(a) # 輸出'hello world'
print(b) # 輸出'HELLO WORLD'
以上代碼中,雖然調用了upper()方法,但a字符串本身並沒有被修改,而是返回一個新的全大寫的字符串。
3. 字符串拼接
在Python中,字符串可以通過加號(+)拼接,但拼接後的字符串依然是新的字符串對象,不會修改原有字符串。
a = 'hello'
b = 'world'
c = a + ' ' + b
print(c) # 輸出'hello world'
三、元組類型
元組是另一個常見的不可變數據類型,在Python中元組是由若干個不同類型的元素組成的,用小括號括起來。
對於元組類型,我們需要注意以下幾個方面:
1. 元組的不可變性
a = (1, 2, 3)
print(id(a))
a = (4, 5, 6)
print(id(a)) # id(a)發生了改變,因為元組是不可變的
從以上代碼可以看出,元組是不可變的。在修改元組時,實際上是創建了一個新的元組對象,而將新對象的引用賦值給了a這個變量。
2. 元組拼接
元組可以通過加號(+)拼接,拼接後的元組依然是新的元組對象。
a = (1, 2, 3)
b = (4, 5, 6)
c = a + b
print(c) # 輸出(1, 2, 3, 4, 5, 6)
3. 解構賦值
元組元素可以通過解構賦值的方式一次性分配給多個變量。
a = (1, 2, 3)
x, y, z = a
print(x, y, z) # 輸出1 2 3
總結
本文深入探討了Python中的不可變數據類型,包括數字類型、字符串類型和元組類型。我們學習了這些不可變數據類型的基本特性,比如它們的不可變性、常量摺疊、對象池等等。在實際應用中,我們需要充分利用這些數據類型,更好地搭建Python應用程序。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/238715.html