Python學習筆記 物件的引用和拷貝

2021-09-24 12:28:43 字數 1690 閱讀 6464

物件的引用和拷貝

引用賦值操作總是儲存物件的引用,需要注意原處修改可變物件(列表,字典)時,可能影響程式中其他地方對相同物件的其他引用。

l1 = [1,2,3]

l2 = ['a',l1,'3']

d1 =

print(l1)

print(l2)

print(d1)

執行結果:

[1, 2, 3]

['a', [1, 2, 3], '3']

現在修改l1[1]的值在輸出,可以看到l1在其他地方的引用也改變了:

l1 = [1,2,3]

l2 = ['a',l1,'3']

d1 =

l1[1] = 'cc'

print(l1)

print(l2)

print(d1)

執行結果:

[1, 'cc', 3]

['a', [1, 'cc', 3], '3']

拷貝

拷貝的4種方法: 1. 沒有限制條件的分片表示式l[:]能複製序列;

l1 = [1,2,3]

l2 = l1[:]

l1[1] = 'cc'

print(l1)

print(l2)

執行結果:

[1, 'cc', 3]

[1, 2, 3]

2.字典copy方法可以複製字典;

d1 = 

d2 = d1.copy()

d1['a'] = 'cc'

print(d1)

print(d2)

執行結果:

3.有些內建函式可以生成拷貝,如list

l1 = [1,2,3,4]

l2 = list(l1)

l1[1] = 5

print(l1)

print(l2)

執行結果:

[1, 5, 3, 4]

[1, 2, 3, 4]

4.copy標準庫能夠生成完整拷貝;

import copy

l1 = [1,2,3,4]

l2 = [l1,5,6,7]

l3 = l2[:] #淺拷貝,只能頂層拷貝,巢狀的序列不能拷貝

l4 = copy.deepcopy(l2) #完整拷貝,包括裡面巢狀的序列

l1[0] = 9

l2[1] = 11 #注意比較l2,l3的輸出結果

print(l1)

print(l2)

print(l3)

print(l4)

執行結果:

[9, 2, 3, 4]

[[9, 2, 3, 4], 11, 6, 7]

[[9, 2, 3, 4], 5, 6, 7]

[[1, 2, 3, 4], 5, 6, 7]

注意:無限制分片拷貝和字典的copy方法,只能做頂層拷貝,不能拷貝巢狀的資料結構。

python的物件引用

首先,我們來了解一下python的基礎概念 1.python在heap中分配的物件分成兩類 可變物件和不可變物件。所謂可變物件是指,物件的內容是可變的,例如list。而不可變的物件則相反,表示其內容不可變。不可變物件 int,string,float,tuple 可變物件 list,dictiona...

Python基礎學習筆記 引用

舉例 a 1嚴格來說定義了乙個變數a,儲存的是資料1在記憶體中的乙個位址 通俗來說儲存的就是資料1的記憶體位址。a 1print 變數a id a hex id a b儲存的是a變數儲存的記憶體位址 b a print 變數b id b hex id b a 2 a重新賦值,記憶體位址改變 prin...

python物件 引用

python中 所有的python物件都有3個特徵 身份,型別和值 其它內建型別 核心筆記 布林值 none false 所有的值為0的數 0 整型 0.0 浮點型 0l 長整型 0.0 0 0j 複數 空字串 空列表 空元組 空字典 bool bool 函式測試 bool false 值不是上面列...