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
未完待更新…