1. 程式人生 > >[Python] 直接賦值、淺拷貝和深度拷貝解析

[Python] 直接賦值、淺拷貝和深度拷貝解析

直接賦值:其實就是物件的引用(別名)。
淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。
深拷貝(deepcopy): copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。

字典淺拷貝例項

例項

>>>a = {1: [1,2,3]}
>>> b = a.copy()
>>> a, b
({1: [1, 2, 3]}, {1: [1, 2, 3]})
>>> a[1].append(4)
>>> a, b
({1: [1, 2, 3, 4]}, {1: [1, 2
, 3, 4]})

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

例項

>>>import copy
>>> c = copy.deepcopy(a)
>>> a, c
({1: [1, 2, 3, 4]}, {1: [1, 2, 3, 4]})
>>> a[1].append(5)
>>> a, c
({1: [1, 2, 3, 4, 5]}, {1: [1, 2, 3, 4]})

解析
1、b = a: 賦值引用,a 和 b 都指向同一個物件。
這裡寫圖片描述
2、b = a.copy(): 淺拷貝, a 和 b 是一個獨立的物件,但他們的子物件還是指向統一物件(是引用)。
這裡寫圖片描述


3、b = copy.deepcopy(a): 深度拷貝, a 和 b 完全拷貝了父物件及其子物件,兩者是完全獨立的。
這裡寫圖片描述

更多例項
以下例項是使用 copy 模組的 copy.copy( 淺拷貝 )和(copy.deepcopy ):
例項

#!/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']])

相關推薦

Python 直接拷貝深度拷貝解析

log epc uno amp 技術分享 example 內部 clas color 直接賦值:其實就是對象的引用(別名)。 淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。 深拷貝(deepcopy): copy 模塊的 deepcopy

Python 直接拷貝深度拷貝解析

ima img 引入 對象的引用 print function 引用 輸出結果 ons 直接賦值:其實就是對象的引用(別名)。 淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。 深拷貝(deepcopy): copy 模塊的 deepcopy 方法

Python直接拷貝深度拷貝解析

rabl iterable bject nes 返回值 元祖 列表 深度 拷貝 ython 文件 writelines() 方法用於向文件中寫入一序列的字符串。 這一序列字符串可以是由叠代對象產生的,如一個字符串列表。 換行需要制定換行符 \n。 語法 writelines

[Python] 直接拷貝深度拷貝解析

直接賦值:其實就是物件的引用(別名)。 淺拷貝(copy):拷貝父物件,不會拷貝物件的內部的子物件。 深拷貝(deepcopy): copy 模組的 deepcopy 方法,完全拷貝了父物件及其子物件。 字典淺拷貝例項 例項 >>&

python直接拷貝拷貝

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

學習python--第八天(直接拷貝深度拷貝解析)

bsp 克隆 copy deepcopy 直接 python str nbsp pytho 直接賦值:其實就是對象的引用(別名)。 淺拷貝(copy):拷貝父對象,不會拷貝對象的內部的子對象。--只拷貝第一層 深拷貝(deepcopy): copy 模塊的 de

python 字典拷貝拷貝

# 專案開發中,因字典可修改,所以注意拷貝方式 import copy   1. 原字典操作 dict1 = {'user': 'test', 'num': [1, 2, 3]}              &

Python拷貝與深拷貝的區別

賦值,其實就是物件的引用,對新物件的如何修改都會影響到原始物件。 Python中有兩種拷貝操作:淺拷貝和深拷貝。 copy.copy(x):返回x的淺拷貝。 copy.deepcopy(x):返回x的深拷貝。 那麼都是拷貝,淺拷貝和深拷貝有什麼不同嗎? 淺

python學習(六):python拷貝拷貝的區別

存在賦值、淺拷貝、深拷貝問題的資料型別是對組合物件來說,所謂的組合物件就是包含了其它物件的物件,如列表,類例項。 其他的單個物件則不存在這個問題。 可變物件: list, dict. 不可變物件有: int, string, float, tuple.  

Python拷貝拷貝的區別?

1.賦值(=),就是建立了物件的一個新的引用,修改其中任意一個變數都會影響到另一個。 2.淺拷貝:建立一個新的物件,但它包含的是對原始物件中包含項的引用(如果引用的方式修改其中的一個物件,另外一個也會修改改變) {1.完全切片方法;2.工廠函式,如list();3.copy模組的cop

Python拷貝拷貝

賦值:a=b,只拷貝了物件的引用,沒有拷貝內容。兩個物件的id一樣 淺拷貝:copy.copy(),構造一個新的複合物件,然後將子物件引用插入到原始物件的副本中。 深拷貝:copy.deepcopy(),構造一個新的複合物件,然後遞迴地將子物件副本插入原始物件的副本。 給個栗子:

js物件的直接拷貝與深拷貝

  最近Vue專案中寫到一個業務,就是需要把對話方塊的表單中的資料,每次點選提交之後,就存進一個el-table表格中,待多次需要的表單資料都提交進表格之後,再將這個表格提交,實現多個表單資料的同時提交,期間還可以用表格進行預覽、修改等其他操作。將每個表單資料存進表格的程式碼大致程式碼如下:     let&

Python 拷貝深度拷貝

前言: 在建立二維陣列時,遇到了list * n—>n shallow copies of list concatenated, n個list的淺拷貝的連線的情況 賦值、淺拷貝和深度拷貝 賦值:是物件的引用 淺拷貝(copy):拷貝父物件,不會

python拷貝拷貝三者之間的區別

python的賦值、淺拷貝和深拷貝三者之間的區別 類似的文章已經很多了,但是在學習過程中,還是有一些模糊的地方,所以這裡把自己的理解記錄下來,便於以後複習,溫故知新! 1.賦值 賦值是將一個物件的地址賦值給一個變數,讓變數指向該地址( 舊瓶裝舊酒 )。 修改不可

Python拷貝拷貝的區別

ID IV 元素 改變 拷貝 但是 int 需要 copy 一、賦值 str例子 >>> a = 'hello' >>> b = 'hello' >>> c = a >>&

拷貝拷貝的區別?

首先要知道變數,物件,引用三者之間的關係 變數: 是一個元素, 擁有指向物件的連線空間 **物件:**被分配的一塊記憶體,儲存代表的值 引用: 是變數到物件的指標 一、賦值 在 Python 中,物件的賦值就是簡單的物件引用, 如下所示: a = [1,2,

python拷貝拷貝區別

閱讀目錄 在寫Python過程中,經常會遇到物件的拷貝,如果不理解淺拷貝和深拷貝的概念,你的程式碼就可能出現一些問題。所以,在這裡按個人的理解談談它們之間的區別。   回到頂部 一、賦值(assignment) 在《Python FAQ1》一文中,對賦值已經講的很清楚

【進階4-1期】詳細解析拷貝拷貝的區別

一、賦值(Copy) 賦值是將某一數值或物件賦給某個變數的過程,分為下面 2 部分 基本資料型別:賦值,賦值之後兩個變數互不影響 引用資料型別:賦址,兩個變數具有相同的引用,指向同一個物件,相互之間有影響 對基本型別進行賦值操作,兩個變數互不影響。 // 木易楊 let a = "muy

拷貝拷貝

直接賦值   先定義了一個變數a,然後將a變數賦值給b。則a、b兩個變數都指向記憶體中同一個物件。 public static <T> T[] extendsArray(T[] data){ int newLength = (dat

引用型別的拷貝拷貝的區別

ICloneable 介面:支援克隆,即用與現有例項相同的值建立類的新例項。 MemberwiseClone 方法:建立當前 System.Object 的淺表副本。 淺拷貝:給物件拷貝一份新的物件。 淺拷貝的定義 —— 只對值型別(或string)型別分配新的記憶