前言
在c++中引數傳遞有兩種形式:值傳遞和引用npejham傳遞。這兩種方式的區別我不在此說,自行補上,如果你不知道的話。我先上python**,看完我們總結一下,**如下:
# copy module import
import copy
# number and string
a = 12
a1 = a
a2 = copy.copy(a)
a3 = copy.deepcopy(a)
# look addr
print("**********number*****==")
print(id(a))
print(id(a1))
print(id(a2))
print(id(a3))
s = '12345'
s1 = s
s2 = copy.copy(s)
s3 = copy.deepcopy(s)
# look addr
print("**********string*****==")
print(id(s))
print(id(s1))
print(id(s2))
print(id(s3))
# otarget =
target1 = target
target2 = copy.copy(target)
target3 = copy.deepcopy(target)
print("**********dict-1*****==")
print(id(target))
print(id(target1))
print(id(target2))
print(id(target3))
print("**********dict-2*****==")
print(id(target['boxes']))
print(id(target1['boxes']))
print(id(target2['boxes']))
print(id(target3['boxes']))
輸出結果:
**********number*****==
10943360
10943360
10943360
10943360
**********string*****==
140567123944648
14056712394npejham4648
140567123944648
140567123944648
**********dict-1*****==
140567124625088
140567124625088
140567124625160
140567123938760
**********dict-2*****==
140567099339272
140567099339272
140567099339272
140npejham567099339464
總結:對於數值、字串而言,不管是賦值符號還是淺拷貝、深拷貝,都是引用的記憶體中的同乙份值,變數指向同一位址。
對於非數值非字串而言,淺拷貝只會拷貝物件的第一層,深拷貝則會把所有層都進行拷貝。
本文標題: 淺述python中深淺拷貝原理
本文位址: /jiaoben/python/239902.html
python中深淺拷貝
先弄懂下面概念 變數 引用 物件 可變物件,不可變物件 切片 拷貝 淺拷貝,深拷貝 變數是乙個系統表的元素,擁有指向物件的鏈結的空間 物件是被分配的一塊記憶體,儲存其所代表的值 引用是自動形成的從變數到物件的指標 在python中不可變物件知 一旦建立就不可修改物件,包括字元創,元組,數字 在pyt...
python淺拷貝 Python中的淺拷貝和深拷貝
在python中,賦值語句不複製物件,它們只是在目標和物件之間建立繫結。當我們使用 運算子時,使用者認為這會建立乙個新物件 好吧,其實並沒有。它只建立乙個共享原始物件引用的新變數。有時使用者想要使用可變物件,為了做到這一點,使用者希望找到建立這些物件的 真實副本 或 轉殖 的方法。或者,有時使用者想...
Python 中的深淺拷貝
python 中的物件之間賦值時,時按照引用傳遞,如果需要拷貝物件 需要使用標準庫中的copy模組 1.copy.copy淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件 2.copy.deepcopy深拷貝 拷貝物件及其子物件 示例 encoding utf 8 import copy a 1,2...