可變類型(mutable):變量進行append、+=等這種操作后 == 改變了變量的值,而不會新建一個對象,變量引用的對象的地址也不會變化,不過對於相同的值的不同對象,在內存中則會存在不同的對象,即每個對象都有自己的地址,相當於內存中對於同值的對象保存了多份,這里不存在引用計數,是實實在在的對象。
- list
- dict
- set
- bytearray
- user-defined classes (除非是特別定義的不可變)
a = [1,2] b = [1,2] print(id(a)) print(id(b))
不可變類型(immutable):改變了變量的值 == 新建了一個對象,而對於相同的值的對象,在內存中則只有一個對象(一個地址), python的id()
方法讓你明白
- int
- float
- decimal
- complex
- bool
- string
- tuple
- range
- frozenset
- bytes
例子
a = 3 b = 3 print(id(a)) print(id(b)) # mem addr is same with a a = 5 print(id(a)) boolx = True print(id(boolx)) boolx = False print(id(boolx))
輸出
533780592600 533780592600
533780592664
533780191712
533780191744
[Program finished]