在 python 中,變數命令,引數傳遞,都是通過引用來實現。
如果兩個變數為同乙個引用,那麼這兩個變數對應的資料一定相同
但是兩個對應的資料相同,引用不一定相同。
# 從資料可變與不可變的型別來解析引用
''''
可變資料型別:列表 字典 集合
通過容器的方法來修改其內容,位址不變(引用指向不會發生改變)
通過重新賦值的方式來修改內容,位址改變(引用指向發生改變)
'''# 列表
my_list =
["a"
,"b"
]print
(f"列表改變前id:"
)# 2804311679624
"c")
print
(f"列表方法改變後id:"
)# 2804311679624
my_list =
["a"
,"b"
,"d"
]print
(f"列表重新賦值改變後id:"
)# 2804311679688
# 字典
my_dict =
print
(f"字典修改之前"
)# 1876656552768
my_dict[
"name"]=
"小紅"
print
(f"字典鍵方式修改之後"
)# 1876656552768
my_dict =
print
(f"字典賦值修改之後"
)# 1876656552840
# 集合
my_set =
print
(f"集合修改之前"
)# 1683491755400
my_set.update(
"green"
)print
(f"集合方法修改之後"
)# 1683491755400
my_set =
print
(f"集合賦值修改之後"
)# 1683491754504
''' 不可變資料型別
字串 元組 數字
一旦修改了資料的內容,資料的位址發生改變
'''# 字串
my_str =
"abc"
print
(f"字串修改之前"
)# 1368298093008
my_str = my_str.replace(
"c",
"d")
print
(f"字串方法修改之後"
)# 1368298120952
my_str =
"abe"
print
(f"字串重新賦值之後"
)# 1368299138048
# 元組
my_tup =(1
,2,3
)print
(f"元組修改之前"
)# 2255037031624
my_tup =(1
,2,3
,4,[
5,6]
)print
(f"元組重新賦值修改之後"
)# 2255035856152
my_tup[4]
7)print
(f"元組元素為列表修改之後"
)# 2255035856152
# 數字
my_int =
1print(id
(my_int)
)# 140733298270864
my_int1 = my_int
print(id
(my_int1)
)# 140733298270864
my_int =
2print(id
(my_int)
)# 140733298270896
# 對於字元和數字的引用的一些注意點
''' 當python直譯器首次啟動時,會把小數字(-5~256)和短字串(長度小於21)快取到緩衝區中
當在程式中使用這些數字和字串時 就直接從快取區中取。
'''n =
100m =
100j =
257k =
257print(id
(n))
# 140733298274032
print(id
(m))
# 140733298274032
print(id
(j))
# pycharm 測試無效 需要在終端測試
print(id
(k))
a ="hello"
b ="hello"
print(id
(a))
# 2216100228264
print(id
(b))
# 2216100228264
由上述測試可以得出:
無論是可變型別還是不可變的資料型別 只要是被重新賦值 它的id就會改變 即引用指向乙個新的空間
針對可變資料型別來說:
通過一些方法修改自身的內容,id並沒有發生變化
針對不可變型別來說:
只要自身數值發生改變,id就會改變
注意:通過可變型別方法修改不可變型別中的可變元素時,id也不會發生改變
如何理解c 中的引用摺疊
感覺上叫引用坍塌好理解點 reference collapsing rules 就這樣a 變成 a a 變成 a a 變成 a a 變成 a 就是左值引用會傳染,只有純右值 沾上乙個左值引用就變左值引用了 引用摺疊的規則上面的各位已經說得很清楚了,我在這裡補充下引用摺疊是為什麼出現的吧。要說引用摺疊...
Python引用的理解
不可變物件 資料 字串 元組,即使有多個變數共享引用,也不會因為某乙個變數的改變而影響其他共享引用的變數的值 某個變數的改變直接使得該變數不再是之前物件的引用 可變物件 列表 字典 集合,當有多個物件共享引用時,某乙個變數的改變 比如改變某項的值 會直接改變引用的物件的值,而該變數的引用未變 序列的...
Python中物件及引用的理解
def func ls return ls a func b func print a,b 考慮這段 的輸出,要理解python中物件及引用的概念。首先,在整個 中,a func 是func函式的第一次執行。在這次呼叫執行中,func函式的ls引數使用了預設值,也就是乙個空列表物件。呼叫結束後,這個...