python3:挖掘python變數的本質
阿新 • • 發佈:2018-11-09
python變數宣告的時候是無型別的,例如 a=3, a=‘Andy’
咱們和 java 宣告做個比較例如 ,int a=3。
python 一切皆物件,實際a=3,是例項化int物件。
第二個要點是 它宣告之後,會產生一個指標,例如a=3
會在記憶體 生成 a指向3 (a>>3).
咱們先舉個簡單的例子:
a=[1,2,3]
b=a
b.append(4)
print(a)
列印結果:
[1, 2, 3, 4]
小夥伴應該很奇怪,我只是針對b 進行append,怎麼a也會變了。
解釋下 :
1.首先 在記憶體開闢個空間 儲存[1,2,3], a的指標指向這塊空間。
2.b=a 意思就是 把指向儲存空間的指標賦予給b,系統不會再建立一個空間
3.b.append(4) 是對儲存的內容修改,由於 a,b 都指向同一塊儲存,當然他們都改變了
我們判斷函式進行判斷下,看是不是這個原理
a=[1,2,3]
b=a
b.append(4)
print(a)
print(a is b)
print(id(a),id(b))
列印結果:
[1, 2, 3, 4]
True
2009980201288 2009980201288
a is b 比較的是id ,由於他們是一樣的,故返回True。
id 一樣 程式碼他們的指標指向同一個地方。
延伸點吧
大家要記住== 比較的是value ,並不是value。
例如:
a=[1,2,3]
b=[1,2,3]
print(a is b)
print(a==b)
列印結果:
False
True