Python引用的理解

2021-07-31 05:05:20 字數 1113 閱讀 4704

不可變物件:資料、字串、元組,即使有多個變數共享引用,也不會因為某乙個變數的改變而影響其他共享引用的變數的值(某個變數的改變直接使得該變數不再是之前物件的引用)

可變物件:列表、字典、集合,當有多個物件共享引用時,某乙個變數的改變(比如改變某項的值),會直接改變引用的物件的值,而該變數的引用未變

序列的操作:重複、合併、分片是直接將變數1的值拷貝給變數2,不存在共享引用(兩個變數的id不一樣,但是變數的對應的項的id是一樣的)

a = [1, , [3]]

print id(a)

print (id(a[0]),id(a[1]),id(a[2]))

#結果:

53665920

(47962712, 53687472, 53645600)

b = a[:]

print id(b)

print (id(b[0]),id(b[1]),id(b[2]))

#結果:

53666160

(47962712, 53687472, 53645600)

分析:1、a與b不共享引用

2、a[0]與b[0]共享引用

3、a[1]與b[1]共享引用,a[1]、b[1]是字典

4、a[2]與b[2]共享引用,a[2]、b[2]是列表

b[1][3]=33

#改變的字典內的某個項,共享引用的變數收到影響

b[2]=[4]

#改變的b[2]列表,b[2]列表的引用變了,a[2]列表的引用未變

b[0]=2

#改變的是b[0],b[0]的引用變了,a[0]的引用未變

print b

print (id(b[0]),id(b[1]),id(b[2]))

print a

print (id(a[0]),id(a[1]),id(a[2]))

#結果:

[2, , [4]]

(47962700, 53687472, 53667200)

[1, , [3]]

(47962712, 53687472, 53645600)

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

在 python 中,變數命令,引數傳遞,都是通過引用來實現。如果兩個變數為同乙個引用,那麼這兩個變數對應的資料一定相同 但是兩個對應的資料相同,引用不一定相同。從資料可變與不可變的型別來解析引用 可變資料型別 列表 字典 集合 通過容器的方法來修改其內容,位址不變 引用指向不會發生改變 通過重新賦...

Python中物件及引用的理解

def func ls return ls a func b func print a,b 考慮這段 的輸出,要理解python中物件及引用的概念。首先,在整個 中,a func 是func函式的第一次執行。在這次呼叫執行中,func函式的ls引數使用了預設值,也就是乙個空列表物件。呼叫結束後,這個...

引用傳遞理解

c 中說值傳遞,應用傳遞,物件傳遞我的理解一直有乙個誤區,最近犯了個低階的錯誤,記錄一下 1 class cla1 2 6 poco.teststaticchange poco poco.value after change va 7 poco.testchange poco poco.valeu ...