Python詳細解析 深拷貝,淺拷貝,賦值

2021-09-25 18:47:11 字數 1349 閱讀 1483

假設我們另x=[1,2,3,4,5],y=x,如果我們改變x的值,y的值會不會也跟著變化,答案是會的,因為賦值後雖然y的值和x的值是一樣的,但是他們對應的引用還是相同的,如果改變了x其中乙個裡面的值,y中對應位置的元素也會改變,如下圖

x=[1,2,3,4]

y=xprint(y)

# 結果[1, 2, 3, 4]

x[0]=10

print(y)

# 結果[10, 2, 3, 4]

淺拷貝是運用函象進行拷貝,例如x=[[1,2],[3,4],[5,6]],x為乙個二維列表,下面我們對x進行拷貝:y=x.copy(),在這裡我們就稱y為x的淺拷貝,那麼什麼是淺拷貝?

首先我們對x裡的元素進行操作,看看y有沒有變化

x=[[1,2],[3,4],[5,6]]

y=x.copy()

print(y)

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

x[0]=1

print(x)

# [1, [3, 4], [5, 6]]

print(y)

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

在例子中發現,我們改變了x裡面元素的值,但是y沒有變,但是如果我們改變x中二維列表的值呢?

x=[[1,2],[3,4],[5,6]]

y=x.copy()

x[0][1]=100

print(x)

# [[1, 100], [3, 4], [5, 6]]

print(y)

# [[1, 100], [3, 4], [5, 6]]

變了,變了,他真的變了,我們發現,如果改變x中的二維列表的值,y就會跟著改變,那麼我們可以得出淺拷貝結論

淺拷貝:如果是不可變型別,則拷貝物件的引用,如果是可變型別,則只拷貝父物件,拷貝物件內部子物件的引用

深拷貝就沒有引用之分了,完全就是將原來的元素複製了一遍,不管原來的是幾層,不管怎麼修改原來的元素,深拷貝的物件都不會修改。完全拷貝了父物件及其子物件,修改原來的值,新物件不受影響。需要匯入copy包   (import copy),然後用y=copy.deepcopy(x)進行拷貝

轉 Python深複製淺複製or深拷貝淺拷貝

copy.copy 淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件。copy.deepcopy 深拷貝 拷貝物件及其子物件 用乙個簡單的例子說明如下 import copy a 1,2,3,4,a b c b a c copy.copy a d copy.deepcopy a 很容易理解 a是乙個...

Python 引用 淺拷貝 深拷貝解析

1 的作用。僅僅是位址的引用,當原列表或者新列表中任意元素改變,均會對另外乙個產生影響 引用 本例中屬於位址的引用,其中a和b共用同一塊記憶體 當修改共用記憶體中的任意的內容是時,均會影響到另外的內容 a 0,1,2,3,4 b a 修改a 0 後,a 0 和b 0 都會改變 a 0 10 prin...

vue物件深拷貝 vue陷阱 深拷貝vs淺拷貝

案例重現 看下面的乙個例子 data this.info m this.info.attr1 8 console.log m 這是vue的部分 我們猜測m會輸出什麼,你會驚奇的發現m會和this.info繫結,也就是對this.info.attr1的修改,會導致m的值變化,控制台輸出的結果是 att...