2022年12月1日 星期四

[Python] Python的變數僅僅只是一個tag

 

在python 世界裡, 宣告的變數僅僅只是一個tag。而tag 可以到處貼, 所以當你問 tag 的資料型態時 , 那就是在問tag 當下所貼的位置的物件資料型態為何  ?  

a=3  , 則 type(a)==> int

b=3.14  , 則 type(b)==> float

c="hello"  , 則 type(c)==> str

3, 3.14, "hello" 這都是物件, 佔有空間 ,而a, b, c 就是tag name, 只是一個名字用來存取物件而已。

python 的變數完全不同於C/C++ 變數的概念。C/C++ 變數是佔有空間的, 空間存放著資料, 而空間有多大就決定了資料的數值範圍。

int a=64;   (佔4個bytes)

char ch='A';  (佔1個bytes)





Python 有Garbage collection 的機制, 故物件10沒有任何tag參考, Python 會自己回收。
Python 中的List , 它是一個container ,即它是具有一個空間。 如 a=[3,3,1] , a[0] 這個tag 指向物件3,  a[1] 這個tag 也指向物件3, 而 a[2] 這個tag 指向物件1



你可能會問一個問題, Python 的變數用這樣搞有什麼好處?

用個例子說明好了,  a=[1,2,3] 

若要複製一份給c, 執行 c=a.copy() 就會將a的container 表格複製給c, 因為只是複製了container a 表格, 和資料物件多大沒有關係, 所以可以很快,也不用將相同的資料物件在記憶體中放兩份。若是C/C++ 則a, c 是各別的空間, 因此即使是相同的資料,在記憶體中也得各自存放一份,會比較佔空間,而且在複製資料時也得一個個byte 複製過去 ( memcpy),速度上也比較慢。






相關文章:

沒有留言 :

張貼留言