物件的引用和拷貝
引用賦值操作總是儲存物件的引用,需要注意原處修改可變物件(列表,字典)時,可能影響程式中其他地方對相同物件的其他引用。
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 值不是上面列...