1. 程式人生 > >物件引用與copy,deepcopy之間的區別

物件引用與copy,deepcopy之間的區別

import numpy as np
賦值(物件引用)
a = np.array([1, 2, 3, 4])
a
array([1, 2, 3, 4])
b = a
b
array([1, 2, 3, 4])
a[2] = 0
a
array([1, 2, 0, 4])
b
array([1, 2, 0, 4])
b[1] = 0
a
array([1, 0, 0, 4])
c = b[1:3]
c
array([0, 0])
c[1] = 2
c
array([0, 2])
a
array([1, 0, 2, 4])
b
array([1, 0, 2, 4])
copy(物件拷貝,淺拷貝)
a = np.array([1, 2, 3, 4])
b = a.copy()
b
array([1, 2, 3, 4])
b[0] = 0
b
array([0, 2, 3, 4])
a
array([1, 2, 3, 4])
deepcopy(物件拷貝,深拷貝)
a = [1, 2, 3, 4, ['a', 'b']] #原始物件
d = copy.deepcopy(a) #物件拷貝,深拷貝
d
[1, 2, 3, 4, ['a', 'b']]

複製之間的區別

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('\t\t:a = ', a) print('物件引用\t:b = ', b) print('copy\t\t:c = ', c) print('deepcopy\t:d = ', d)
        :a =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
物件引用    :b =  [1, 2, 3, 4, ['a', 'b', 'c'], 5]
copy        :c =  [1, 2, 3, 4, ['a', 'b', 'c']]
deepcopy    :d =  [1, 2, 3, 4, ['a', 'b']]
  • 物件引用只是引用了之前物件愛的索引,當原物件與賦值後的物件發生改變時,另一個物件也會發生改變
  • copy 只拷貝父物件,不會拷貝物件的內部的子物件。也就是隻拷貝一維中的內容,如果一維中是列表,則是引用列表的物件而不是值
  • deepcopy 深拷貝 拷貝物件的值及其子物件的值

相關推薦

物件引用copydeepcopy之間區別

import numpy as np 賦值(物件引用) a = np.array([1, 2, 3, 4]) a array([1, 2, 3, 4]) b = a b array([1, 2, 3, 4]) a[2] = 0 a

java核心技術卷一(三)物件引用建立LocalDate的用法

Date now = new Date();當我們使用上面這個語法之時,實際上是實現了兩個過程,第一個是使用new關鍵字建立了一個物件,另外一個過程是將這個建立的物件與變數now關聯到了一起。在java中任何變數的值都是對儲存在另一個地方的一個物件的引用,這一點很關鍵。Sys

Python中的引用copydeepcopy區別

Python中的引用,個人理解,與C中對地址賦值(僅針對於簡單物件,即不可修改的物件,例如int)相似。 簡單的例子: a = [1, 2, 3] b = a b[0] = 4 print(a) --> [4, 2, 3] print(b) --> [4, 2

物件引用物件區別

先定義一個簡單的類: public class phone{ int length; int wide; double money; String color; } 如果要建立這個類的一個物件,一般的寫法是 phone p1 = new phon

java--物件引用物件區別

一、前言        在java學習中,理解物件以及物件的引用是萬里長征的第一步。但是,現在大量的java學習書籍都將物件以及物件的引用混為一談,然而實際上它們有著本質的區別。為了幫助更多的java學者更好的理解,我將自己的學習理解記錄下來。如有理解不全或者錯誤的地方,歡

由 System.arraycopy 引發的鞏固:物件引用 物件區別

作者:林冠巨集 / 指尖下的幽靈 掘金:https://juejin.im/user/587f0dfe128fe100570ce2d8 部落格:http://www.cnblogs.com/linguanh/ GitHub : https://github.com/af913337456/

assigncopyretain之間區別

copy: 建立一個索引計數為1的物件,然後釋放舊物件 retain:釋放舊的物件,將舊物件的值賦予輸入物件,再提高輸入物件的索引計數為1 Copy其實是建立了一個相同的物件,而retain不是: 比如一個NSString物件,地址為0×1111,內容為@”STR” Cop

Python中copydeepcopy區別以及程式設計實現deepcopy的功能

在python中,有淺複製copy()和深度複製deepcopy(),這兩個的區別我用以下的例子來說明,例如:numlist=[[1,2,[3,4,5]],34,"haha",{"name":{"fistname":"孫","lastName":"悟空"}}]設  numl

iOS 開發 propertystrongweakretainassigncopynomatic 的區別及使用

並且 指針變量 使用 char 導致 數據 ios5 ret int 1:ARC環境下,strong代替retain.weak代替assign,xcode 4.2(ios sdk4.3和以下版本)和之前的版本使用的是retain和assign,是不支持ARC的。xcode

Python 中copydeepcopy區別

deepcopy 改變 般的 blog 等於 div copy clas 但是 import copy 假設在python中對list的復制 copy稱為淺復制 deepcopy稱為深復制 淺復制和深復制在一般的list中作用是相同的,都是進行一個復制 但是在list嵌套l

valueinnerHTMLinnerText的區別

value與innerHTML,innerText的區別: innerHTML與innerText的區別我就不講了,主要講value與這兩者的區別! 1.value是表單元素的特有屬性,非表單元素沒有value屬性,如div,span等; 2.value在不同表單元素裡有不同的意義,如b

賦值、copy()以及deepcopy()的區別

針對以下程式碼進行分析舉例 L1 = [1, 2, 3, 4] L = [ L1, 5, 7] L2 = L Import copy L3 = copy.copy(L2) L4 = copy.deepcopy(L2) 1.賦值 L1 = [1, 2, 3, 4] 在計算機記憶體中開

說說HTTPResponseJsonResponseResponse的區別

1.HTTPResponse是由Django建立的,他的返回格式為HTTPResponse(content=響應體, content_type=響應體資料型別, status=狀態碼),可以修改返回的資料型別,適用於返回圖片,視訊,音訊等二進位制檔案 2.Js

解析Java物件引用JVM自動記憶體管理

象引用應用程式設計介面是JDKTM1.2中新定義的。該應用程式設計介面允許應用程式以物件引用的方式與JVM的記憶體管理器進行互動。當應用程式需管理大量記憶體物件或者在新的Java物件建立之前需刪除原有物件時,Java物件引用應用程式設計介面具有相當大的用途,例如:   

numpy常用概念(copy deepcopy

import numpy as np 賦值(物件引用) a = np.array([1, 2, 3, 4]) a array([1, 2, 3, 4]) b = a b array([1, 2, 3, 4]) a[2] = 0 a array([1

JavaScript中innerHTMLinnerTextcreateTextNode的區別

innerHTML和innerText 它們都會把元素內內容替換掉,區別在於: innerHTML 會把替換內容裡的 HTML 標記解釋執行。 innerText 會把替換內容裡的 HTML 標記原樣輸出而不執行。 例如有如下程式碼: var content = "<b>這是對innerHT

Python中的深複製淺複製(等號賦值、copydeepcopy區別

(作者:陳玓玏) 不是那麼有耐心的朋友可以直接看總結! 一、深複製淺複製的區別 以我比較愚笨的理解,淺複製就是,僅複製物件的引用,而不新開闢記憶體,也就是說,會共享指標,當你改變複製後的物件時,其實是在改變原物件記憶體中的內容。 而深複製的意思是,會

C++面試常見題目1_C++CJava的區別

new/delete是C++的運算子,malloc/free是C/C++語言的標準庫函式。 new無需顯式地指出所需記憶體的尺寸,編譯器會根據型別資訊自行計算。而malloc則需要顯式地指出所需記憶體的尺寸。 new操作符記憶體分配成功時,返回的是物件型別的指標,型別嚴格與物件匹配,無須進行型別轉換。而m

tomcat nginxapache的區別

  一般的運用場景下,apache和nginx在負載均衡裡是前端伺服器,用來處理請求的轉發(反向代理等);絕大部分時候他們本身並不會執行專案。tomcat和jetty,WebLogic是後端伺服器,是直接用來執行專案的容器。 簡單來說就是你發出一個請求,先經過apache或nginx,他們會合理地把請求分配到

static方法非static方法之間區別和呼叫的時機

static方法是屬於類,可以通過類名直接呼叫,非static方法是屬於物件的,如果static方法在沒有建立物件時呼叫非static方法是不成立的,因為非static方法只能通過物件來呼叫。非static方法   所有物件都有自己一套非static方法static方法,是所