如何理解Python中的引用(一)

2021-09-25 01:55:58 字數 2695 閱讀 5666

在 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引數使用了預設值,也就是乙個空列表物件。呼叫結束後,這個...