淺述python中深淺拷貝原理

2022-10-04 18:57:10 字數 1741 閱讀 6031

前言

在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...