python——對象引用、可變性

1. 變量不是盒子

把變量理解爲附加在對象上的標註或者對象的引用

  • 變量a和b引用同一個列表(指向同一個地址),而不是列表的副本,a和b都是列表的引用
a = [1,2,3]
b = a
a.append(4)
print(b)

# result
[1,2,3,4] 

上述代碼用python解釋就是:將變量a分配給了列表[1,2,3],而不是將列表[]1,2,3]分配給了a

創建對象之後纔會把變量分配給對象

2. 標識、引用(別名)、相等性

2.1 標識(id)

  • 每個變量都有標識(id),類型,值。對象一旦創建,它的標識就不會改變
  • 標識就是對象在內存中的地址;is運算符用來比較兩個對象的標識(地址)
  • id()函數用來返回對象的標識的整數表示
a = [1,2,3]
print(id(a)) # 輸出a的標識

# result
1481049521736

2.2 引用(別名)

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

  • 總結:列表、字典、集等保存的是對象的引用,就像第五個例子,列表保存的是L[0],L[]1,L[2],不是整數對象1,2,3。而str、bytes、array.array等單一類型序列是扁平的,保存的不是引用,而是再連續內存中保存的數據本身(對象)

2.3 相等性

  • 指的是“==”操作符,判斷兩個變量所指的對象的值(不是地址)是否相等
  • 存在這樣的情況,兩個變量所指的對象的值相等,但標識不同,這時因爲內存創建了兩個對象,兩個對象的值相等,但是地址不等
a = [1,2,3]
b = [1,2,3]
print(a==b) # True
print(a is b) # False

未完待更新…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章