python面試題 深拷貝與淺拷貝

2021-10-06 11:53:48 字數 2515 閱讀 1777

1.賦值拷貝

2.copy淺拷貝

3.deepcopy深拷貝

import copya=[

1,2,

[3,4

]]

賦值拷貝,預設淺拷貝,傳遞物件的引用而已,原始列表改變,被賦值的b也會做相同的改變

b=a5)

print

(a,' adress: ',id

(a))

# [1, 2, [3, 4], 5] adress: 2670537167752

print

(b,' adress: ',id

(b))

# [1, 2, [3, 4], 5] adress: 2670537167752

copy淺拷貝,沒有拷貝子物件,所以二者子物件變化一致

c=copy.copy(a)

print

(a,' adress: ',id

(a))

# [1, 2, [3, 4], 5] adress: 2670537167752

print

(c,' adress: ',id

(c))

# [1, 2, [3, 4], 5] adress: 26705668595286)

print

(a,' adress: ',id

(a))

# [1, 2, [3, 4], 5, 6] adress: 2670537167752

print

(c,' adress: ',id

(c))

# [1, 2, [3, 4], 5] adress: 2670566859528a[2

]4)#二者子物件變化一致

print

(a,' adress: ',id

(a))

# [1, 2, [3, 4, 4], 5, 6] adress: 2670537167752

print

(c,' adress: ',id

(c))

# [1, 2, [3, 4, 4], 5] adress: 2670566859528

#deepcopy深拷貝,包含物件裡面的子物件的拷貝,即二者之後再無關係

d=copy.deepcopy(a)

print

(a,' adress: ',id

(a))

# [1, 2, [3, 4, 4], 5, 6] adress: 2670537167752

print

(d,' adress: ',id

(d))

# [1, 2, [3, 4, 4], 5, 6] adress: 26705674755927)

print

(a,' adress: ',id

(a))

# [1, 2, [3, 4, 4], 5, 6, 7] adress: 2670537167752

print

(d,' adress: ',id

(d))

# [1, 2, [3, 4, 4], 5, 6] adress: 2670567475592a[2

]4)print

(a,' adress: ',id

(a))

# [1, 2, [3, 4, 4, 4], 5, 6, 7] adress: 2670537167752

print

(d,' adress: ',id

(d))

# [1, 2, [3, 4, 4], 5, 6] adress: 2670567475592

知識點1.所有python物件都擁有三個屬性:身份(id)、型別(type)、值。

print(id

(a))

# 2047482614664

print

(type

(a))

# print

(a)# [1, 2, [3, 4, 4, 4], 5, 6, 7]

知識點2:可變與不可變物件

可變物件: 列表、字典、集合。所謂可變是指可變物件的值可變,身份是不變的。

不可變物件:數字、字串、元組。不可變物件就是物件的身份和值都不可變。

知識點3:引用

在python程式中,每個物件都會在記憶體中申請開闢一塊空間來儲存該物件,該物件在記憶體中所在位置的位址被稱為引用。在開發程式時,所定義的變數名實際就物件的位址引用。

reference:

面試題 String類的淺拷貝 深拷貝 寫時拷貝

string的拷貝是面試中的經常會被問到的問題,所以,學懂string類是非常重要的。下面我們先來看一段 class string else string const string s 拷貝建構函式,相當於系統預設合成 pstr s.pstr string operator const string...

前端的深拷貝和淺拷貝 前端面試 深拷貝和淺拷貝

面試題目 如何實現對乙個陣列或物件的淺拷貝和深拷貝?wtf,複製還分兩種,第一次遇到這種問題的時候很是無語呢,先來看看一般的答案的理解。淺拷貝是只拷貝一層,深層次的物件級別就只拷貝引用。深拷貝是拷貝多層,每一級別的資料都拷貝出來。也就是說,基本資料型別其實不存在深淺拷貝的問題,只有物件和陣列才存在深...

轉 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是乙個...