python中數字是否為可變型別

2022-09-26 11:33:13 字數 1897 閱讀 5925

1、數字(number):

&nwww.cppcns.combsp;     int整型

long長整型

float浮點數

complex複數

布林值(0和1)

2、字串(string)

3、列表(list)

4、元組(tuple)

5、字典(dictionary)

6、集合(set)

通過id函式檢視變數i的記憶體位址進行驗證(使用hex(id(i)) 可以檢視16進製制的記憶體位址)

不可變型別:number、string、tuple

對不可變型別的變數重新賦值,實際上是重新建立乙個不可變型別的物件,程式設計客棧並將原來的變數重新指向新建立的物件(如果沒有其他變數引用原有物件的話(即引用計數為0),原有物件就會被**)。

對於不可變型別int,無論建立多少個不可變型別,只要值相同,都指向同個記憶體位址。

例如number:

>>> number1 = 123

>>> id(number1)

8790928028112

>>> number2 = 123

>>> id(number2)

8790928028112

>>> number3 = 321

>>> id(number3)

49143760

>>>

可以看到執行 i += 1 時,記憶體位址都會變化,因為int 型別是不可變的。

>>> i = 5

>>> id(i)

87912057003程式設計客棧68

>>> i += 1

>>> id(i)

8791205700400

>>>

>>> j = i

>>> id(j)

8791205700400

>>> j

6>>>

可變型別:list、dictionary、set

對可變資料型別重新賦值,並沒有建立新的物件。

例如list:

>>> list1 = [1,2,3,4,5]

>>> id(list1)

49307976

>>> list2 = [1,2,程式設計客棧3,4,5]

>>> id(list2)

49307784

>>> list1.append(123)

>>> list1

[1, 2, 3, 4, 5, 123]

>>> id(list1)

49307976

>>>

如果執行list1=list2,因為list1、list2指向同個記憶體位址,而list1、list2的型別都是list,可變型別,對list1、list2任意乙個list進行修改,都會影響另外乙個list的值。

>>> list1

[1, 2, 3, 4, 5, 123]

>>> id(list1)

49307976

>>>

>>> list1 = list2

>>> id(list1)

49307784

>>> id(list2)

49307784

>>> list2

[1, 2, 3, 4, 5]

>>> list2.append(456)

>>> list1

[1, 2, 3, 4, 5, 456]

>>> list2

[1, 2, 3, 4, 5, 456]

>>>

總而言之:

不可變型別是指向值(value),值不變,則物件不變;值變,則物件變。

可變資料型別是指向名字(name),名不變,則物件不變;名變,則物件變。

內容擴充套件:

python中可變型別和不可變型別的資料?

判斷Python輸入是否為數字

在接收raw input方法後,判斷接收到的字串是否為數字 例如 str raw input please input the number if str.isdigit 為true表示輸入的所有字元都是數字,否則,不是全部為數字 str為字串 str.isalnum 所有字元都是數字或者字母 st...

判斷Python輸入是否為數字

判斷user接收到的字串是否為數字 例如 user 78234 user.isdigit str.isdigit user 兩種寫法 為true表示輸入的所有字元都是數字,false表示不是數字或者不全部為數字 str.isalnum 所有字元都是數字或者字母 str.isalpha 所有字元都是字...

C 中判斷是否為數字

c 判斷string是否為數字 有人提議用int.parse string 的方法,然後通過捕獲異常來判斷返回的值。更好的方法是用正規表示式 public intisnumeric string str 這應該是個好辦法。不過如果要提出更高的要求,例如不僅要判斷字串是否全為數字,還要在判斷後,要求將...