iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 3
0
Software Development

python 自學系列 第 3

python day3 (object)

object

物件主要有 3 個重要的資訊 :

  1. id.用來識別該物件,是代表該物件在記憶體的位址.
  2. type.表示該物件的型別是什麼.
  3. value.該物件的值.

物件又分為 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

上一篇
python day2 (input、output、variables)
下一篇
python day4 (numbers)
系列文
python 自學30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言