1. 程式人生 > >Python中deepcopy 和copy的區別

Python中deepcopy 和copy的區別

歡迎使用Markdown編輯器寫部落格

最近在使用Python語言程式設計的過程中遇見了deepcopy()方法,想著這個名字比較特別,於是網上找了一下參考資料,索性比較了與copy()的區別。兩者區別如下:

  • —–deepcopy(): 深複製,即將被複制物件完全再複製一遍作為獨立的新個體單獨存在。所以改變原有被複制物件不會對已經複製出來的新物件產生影響。
  • —–copy(): 淺複製,並不會產生一個獨立的物件單獨存在,他只是將原有的資料塊打上一個新標籤,所以當其中一個標籤被改變的時候,資料塊就會發生變化,另一個標籤也會隨之改變。這就和我們尋常意義上的複製有所不同了。
    對於簡單的 object,用 shallow copy 和 deep copy 沒區別.

    對於複雜的 object, 如 list 中套著 list 的情況,shallow copy 中的 子list,並未從原 object 真的「獨立」出來。也就是說,如果你改變原 object 的子 list 中的一個元素,你的 copy 就會跟著一起變。這跟我們直覺上對「複製」的理解不同。

程式碼示例:

import copy
origin = [1, 2, [3, 4]] #origin 裡#邊有三個元素:1, 2,[3, 4]
cop1 = copy.copy(origin)
cop2 = copy.deepcopy(origin)
cop1 == cop2 (True)
cop1 is cop2 (False)

#cop1 和 cop2 看上去相同,但#已不再是同一個object
#把origin內的子list [3, 4] 改掉了#一個元素,觀察到 cop1 和 #cop2的變化如下所示:
origin[2][0] = “hey!”
origin=[1, 2, [‘hey!’, 4]];
cop1=[1, 2, [‘hey!’, 4]]
cop2=[1, 2, [3, 4]]

相關推薦

Pythondeepcopy copy區別

歡迎使用Markdown編輯器寫部落格 最近在使用Python語言程式設計的過程中遇見了deepcopy()方法,想著這個名字比較特別,於是網上找了一下參考資料,索性比較了與copy()的區別。兩者區別如下: —–deepcopy(): 深複製,即將被

Python__repr____str__區別

close 提示 bsp pri urn 創建 pla 不同 並不是 1.先看區別 1 class Test(object): 2 def __init__(self, value=‘hello, world!‘): 3 self.data

Pythonis==的區別

int 要素 com 分別是 htm python get 參考資料 元組類型 Python中有很多運算符,今天我們就來講講is和==兩種運算符在應用上的本質區別是什麽。 在講is和==這兩種運算符區別之前,首先要知道Python中對象包含的三個基本要素,分別是:id(身份

Pythonis==的區別(面試題)

面試的時候,當問到 is 和 == 的區別時,有很多同學對這個問題不是很清楚,有的人理解但是表述不清楚,接下來我們通過本文對這個做一個深刻的理解。 我們來看一個例子: 我們可以從上面看出,有的is和==相同,而有的不同呢?我們先看看官方文件裡面怎麼解釋這兩者之間的區別: 官方文件中說 is

Pythonbreakcontinue區別

break跳出整個迴圈,而continue跳出本次迴圈 continue語句用來告訴python跳過當前迴圈,進行下一個迴圈 break語句用來終止迴圈語句,即迴圈條件沒有False條件或者序列還沒被完全遞迴完,也會停止執行迴圈語句。 break和continue語

Python For While 區別

1.for迴圈是遍歷列表和元組,而while迴圈只要迴圈不滿足,則會結束迴圈 #for..in迴圈,遍歷列表和元組 list1 = [1,2,3,4,5] for i in list1: print(i) tuple1 = (1,2,3,4,5) for m in tuple1

python is == 的區別

Python中的物件包含三要素:id、type、value 其中:id用來唯一標識一個物件,type標識物件的型別,value是物件的值 is判斷的是a物件是否就是b物件,是通過id來判斷的 ==判斷的是a物件的值是否和b物件的值相等,是通過value來判斷的 https:/

Python classmethodstaticmethod區別

Though classmethod and staticmethod are quite similar, there's a slight difference in usage for both entities: classmethod must have a reference to a c

python基礎(8)pythonis==的區別詳解

# 前置知識點 當我們建立一個物件時,我們要知道它內部幹了些什麼 - 1.建立了一個隨機id,開闢了一片記憶體地址 - 2.自動聲明瞭這個物件的型別type - 3.給這個物件賦值value   ## 小例子 ``` a = 1 print(id(1)) print(id(a)) print(ty

Pythonsort()sorted()的區別

-s 可變對象 傳遞 內置函數 ict pan 16px nbsp lin 1、sort()是可變對象(字典)的方法,無參數,無返回值, sort()會改變可變對象,因此無需返回值。例如: list: 1 >>> a = [4,3,7,8] 2 >

理解一下python的淺copycopy

學習 class 修改 資源 需要 code [0 str 變量 最近在學習過程中,了解了一下,淺copy和深copy,做個記錄。 所謂淺拷貝就是對引用的拷貝,所謂深拷貝就是對對象的資源的拷貝。 首先,對賦值操作我們要有以下認識: 賦值是將一個對象的地址賦值給一個變量,讓

pythonreturnprint的區別

bsp 不同 urn text 一是 什麽 cnblogs style c99 之前遇到這個問題,就試著對比幾種不同的結果,總結啦一下return和print的區別。 總結: return的作用之一是返回計算的值print的作用是輸出數據到控制端在第一個結果中什麽都沒

Python IteratorIterable的區別

pytho 數據 執行 next 判斷 -h 實現 col http (轉載:http://blog.csdn.net/passionkk/article/details/49929887) Python中 list,truple,str,dict這些都可以被叠代,但他們並

python%r%s的區別

ould mat mark post inf info repr pan formatter %r用rper()方法處理對象 %s用str()方法處理對象 有些情況下,兩者處理的結果是一樣的,比如說處理int型對象。 例一: print "I am %d years o

Python is == 區別

Python is和== Python中is和==的區別,如下: 環境實在IPython做的測試 在Python中 is是一個對象標識符(object identity ),== 表示相(equality);is 是通過對象所指向的內存地址是否相等來進行判斷== 則是通過調用方法 eq判斷兩邊的對象是

Pythonsysos模塊的區別

tro nes with span ren ocs acc input.h open() sys: This module provides access to some variables used or maintained by the interpreter an

python ifelif的區別

pre else bsp 判斷 nbsp 優秀 自動 滿足 lse 如果程序中判斷事件很多,全部用if的話,會遍歷整個程序,用elif 程序運行時,只要if或後續某一個elif之一滿足邏輯值為True,則程序執行完對應輸出語句後自動結束該輪if-elif(即不會再去冗余地執

python的 == is 的區別

-s 對比 不能 -- 其他 ont clas 通過 數字 == 比較的是兩邊的值 is 比較的是兩邊的內存地址 通過 id()獲取內存地址 小數據池:我們使用過的值存儲在小數據池中,供其他數據使用.   小數據池僅限於 數字 和 字符串:     數字的小數池範圍 -

pythonsysos的區別

move ali 去掉 操作系統 格式 自動 form 出現 class <os和sys的官方解釋> ?os os: This module provides a portable way of using operating system depe

Python*args**kwargs的區別

注:《python核心程式設計第2版》的11.6可變長度的引數—章節中有詳細介紹。 python中我們經常見到,有些函式的引數中有*args和kwargs,那這兩個引數是什麼意思呢? 沒錯,*args和kwargs就是python中的可變引數。 可能很多人用了幾年的 Python 都沒真