Python直接賦值 淺拷貝與深度拷貝例項分析

2022-09-29 17:45:11 字數 1183 閱讀 7536

字典淺拷貝例項

例項>>>a =

>>> b = a.copy()

>>> a, b

(, )

>>> a[1].append(4)

>>> a, b

(, )

深度拷貝需要引入 copy 模組:

例項>>>i程式設計客棧mport copy

>>> c = copy.deepcopy(a)

>>> a, c

(, )

>>> a[1].append(5)

>>> a, c

(, )

解析1、b = a: 賦值引用,a 和 b 都指向同乙個物件。

2、b = a.copy(): 淺拷貝, a 和 b 是乙個獨立的物件,但他們的子物件還是指向統一物件(是引用)。

b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的。

更多例項

以下例項是使用 copy 模組的 copy.copy( 淺拷貝 )和(copy程式設計客棧.deepco程式設計客棧py ):

例項#!/usr/bin/python

# -*-coding:utf-8 -*-

import copy

a = [1, 2, 3, 4, ['a', 'b']] #原始物件

b = a #賦值,傳物件的引用

c = copy.copy(a) #物件拷貝,淺拷貝

d = copy.deepcopy(a) #物件拷貝,深拷貝

a.append(5) #修改物件a

a[4].append('c') #修改物件a中的['a', 'b']陣列物件

print( 'a = ', a )

print( 'b = ', b )

print( 'c = ', c )

print( 'd = ', d )

以上例項執行輸出結果為:

('a = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])

('b = ', [1, 2, 3, 4, ['a', 'b', 'c'], 5])

('c = ', [1, 2, 3, 4, ['a', 'b', 'c']])

('d = ', [1, 2, 3, 4, ['a', 'b']])

深拷貝 淺拷貝 直接賦值

使用直接賦值後兩個物件就完全一樣,隨著改變乙個物件的值另乙個物件的值也隨之改變。淺拷貝,物件中的值型別互補影響,但是引用型別 string雖然是引用型別但特殊存在類值型別 隨著乙個物件的值改變另乙個也會改變。深拷貝,兩個物件完全獨立互補影響 1 class program212 13 1415 pu...

python直接賦值 深拷貝和淺拷貝

python中,物件賦值實際上是物件的引用。當建立乙個物件,將其賦值給另乙個變數,python並沒有拷貝這個物件,而是拷貝了這個物件的引用。所以如果從單純的賦值語句來實現clone物件的話,那可能bug出現的也會莫名其妙.python中可以使用copy模組來複製物件.copy.copy 為淺拷貝,只...

直接賦值 淺拷貝和深拷貝

我們經常使用的 student s1 newstudent student s2 s1 直接物件賦值,它只是拷貝了物件引用位址而已,並沒有在堆記憶體重新生成乙個新的物件 如下圖 上面的s1和s2引用其實都是指向堆中同乙個student例項位址。所以如果改下s1中的任何成員變數 基本型別或者引用型別 ...