物件主要有 3 個重要的資訊 :
物件又分為 mutable 及 immutable.mutable 物件可以改變物件的值,而 immutable 物件不能改變該物件的值,所以當想要改變 immutable 物件的值時,只能另外產生一個新的值的 immutable 物件,然後把變數重新綁定到新的值的物件上.
例如下面例子 str 就是 immutable 物件,所以當要改變 name 變數的值,python 會先另外建立一個值為 Sam 的 str 物件,再把 name 重新綁定到 Sam 這 str 物件.可以透過 id function 看到記憶體位址是不一樣的.
>>> name = 'Daniel'
>>> id(name)
4471913200
>>> name = 'Sam'
>>> id(name)
4471913328
int 也是 immutable 物件,所以當值有改變時其實指到的是新的物件
>>> sum = 100
>>> id(sum)
4468692880
>>> sum = sum + 1
>>> id(sum)
4468692912
list 是 mutable 物件,所以可以改變 list 的值,不會產生新的物件,所以看到下面的例子,就算在 list 增加了 string,names 的記憶體位址都不會改變.
>>> names = []
>>> id(names)
4471558864
>>> names.append("apple")
>>> type(names)
<class 'list'>
>>> print(names)
['apple']
>>> id(names)
4471558864
另外可以透過 is 來判斷兩個物件是否相同,可以看到如果 my_name 重新綁到 'Sam' 這時候 my_name 跟 user_name 是不同的,但如果再改回來成 'Daniel' 又會是相同.記得這邊的 True 跟 False 是判斷是不是在記憶體裡相同的位址.
>>> my_name = 'Daniel'
>>> user_name = my_name
>>> my_name is user_name
True
>>> my_name = 'Sam'
>>> my_name is user_name
False
>>> my_name = 'Daniel'
>>> my_name is user_name
True
如果是要判斷物件的值是否相同是使用 == 來判斷.
>>> my_list = [1]
>>> user_list = [2]
>>> other_list = my_list
>>> my_list is user_list
False
>>> my_list is other_list
True
>>> my_list == user_list
False
>>> my_list == other_list
True