在python中,物件賦值實際上是物件的引用。當建立乙個物件,然後把它賦給另乙個變數的時候,python並沒有拷貝這個物件,而只是拷貝了這個物件的引用。
賦值其實只是傳遞物件引用,引用物件id是一樣的。原始列表改變,被賦值的b也會做相同的改變。
alist = [1,2,3,["a","b"]]b = alist
print(b)
>>>[1, 2, 3, ['a', 'b']]
print(alist)
>>>[1, 2, 3, ['a', 'b'], 5]
print(b)
>>>[1, 2, 3, ['a', 'b'], 5]
淺拷貝是指拷貝的只是原始物件元素的引用,換句話說,淺拷貝產生的物件本身是新的,但是它的內容不是新的,只是對原物件的乙個引用。
>>> import copy>>> alist=[1,2,3,["a","b"]]
>>> c = copy.copy(alist)
>>> print(alist);print(c)
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]
>>> print(alist);print(c)
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]
>>> alist[3]
['a', 'b']
>>> print(alist);print(c)
[1, 2, 3, ['a', 'b', 'cccc'], 5]
[1, 2, 3, ['a', 'b', 'cccc']] #裡面的子物件被改變了
淺copy的幾種方式:
深拷貝是指完全拷貝原始物件,而且產生的物件是新的,並且不受其他引用物件的操作影響。
深copy:
names2 =copy.deepcopy(names)
>>> import copy>>> alist=[1,2,3,["a","b"]]
>>> d=copy.deepcopy(alist)
>>> print(alist);print(d)
[1, 2, 3, ['a', 'b']]
[1, 2, 3, ['a', 'b']]始終沒有改變
>>> print(alist);print(d)
[1, 2, 3, ['a', 'b'], 5]
[1, 2, 3, ['a', 'b']]始終沒有改變
>>> alist[3]
['a', 'b']
>>> print(alist);print(d)
[1, 2, 3, ['a', 'b', 'ccccc'], 5]
[1, 2, 3, ['a', 'b']] 始終沒有改變
Python學習筆記(六)
函式 呼叫python內建的函式,可以通過 help fun 進行查詢。舉例 abs x 求x絕對值 cmp x,y 比較兩個數大小,如果 xy,返回 1。int x 把其他資料型別轉換為整數,包括字串型別。str 把其他型別轉換成 str。編寫函式 def my abs x if x 0 retu...
Python學習筆記(六)
函式練習題 1 寫函式,檢查傳入字典的每乙個value的長度,如果大於2,那麼僅保留前兩個長度的內容,並將新內容返回給呼叫者。dic def dict func dic for key,value in dic.items if len value 2 value value 0 2 dic key...
Python學習筆記六
python課堂筆記六 常用模組已經可以在單位實際專案中使用,可以實現運維自動化。無需手工備份檔案,資料庫,拷貝,壓縮。常用模組 time模組 time.time time.localtime time.strftime os模組 主要針對作業系統的一些方法,如 切換目錄 sys模組 跟python...