python中的深淺拷貝

2022-07-11 06:39:08 字數 3214 閱讀 1035

#1、python中的深淺拷貝

# 拷貝我們可以先理解為乙個賦值的概念

#舉例:①

# a = 1

# b = a

# print(a) #執行結果為:1

# print(b) #執行結果為:1

# print(id(a)) #執行結果為:140730443784848

# print(id(b)) #執行結果為:140730443784848

#舉例:②

# a = [1,2,3]

# c = a

# a[0] = 'hellow'

# print(a) #執行結果為:['hellow', 2, 3]

# print(c) #執行結果為:['hellow', 2, 3]

# print(id(a)) #執行結果為:2489402811016

# print(id(c)) #執行結果為:2489402811016

#舉例:③

import copy #匯入copy這個模組

#第一步操作如下:

# a = [1,2,3]

# b = copy.copy(a)

# print(a) #執行結果為:[1, 2, 3]

# print(b) #執行結果為:[1, 2, 3]

# print(id(a)) #執行結果為:1530612734536

# print(id(b)) #執行結果為:1530611558216

#第一步備註如下:

# 1、copy.copy()這個方法是淺拷貝

#2、通過列印結果可以看到當b的值是通過淺拷貝a的值時候,a和b的儲存位址不一樣

#3、可以理解為a的值在記憶體中有一塊儲存位址,b通過淺拷貝a的值後會在記憶體新開闢一塊記憶體位址

#第二步操作如下:

# a = [1,2,3]

# b = copy.copy(a)

# a[0] = 'hellow'

# print(a) #執行結果為:['hellow', 2, 3]

# print(b) #執行結果為:[1, 2, 3]

# print(id(a)) #執行結果為:2257773640520

# print(id(b)) #執行結果為:2257773520840

# 第二步備註如下:

# 1、通過索引修改a裡面的某個元素的值,檢視a的結果發現已經發生改變

# 2、通過索引修改a裡面的某個元素的值,檢視b的結果發現無任何改變

# 3、由於當b通過淺拷貝a後值儲存的位址和a儲存的位址不是同一位址,所

# 以a和b任何一方修改裡面元素的值都不會影響對方,可以理解為兩個人已經

# 離婚了,沒有任何瓜葛。

# 舉例:④

# a = [[1,2,3],[4,5,6]]

# b = copy.copy(a)

# print(a) #執行結果:[[1, 2, 3], [4, 5, 6]]

# print(id(a)) #執行結果為:2559396978312

# print(b) #執行結果:[[1, 2, 3], [4, 5, 6]]

# print(id(b)) #執行結果:2559397186504

# a[0][0] = 'hellow'

# print(a) #執行結果為:[['hellow', 2, 3], [4, 5, 6]]

# print(b) #執行結果為:[['hellow', 2, 3], [4, 5, 6]]

# ④備註如下:

# 1、當列表裡面包含列表的時候用copy.copy()淺拷貝這個方法有特殊情況

# 2、相當於b整體開闢了乙個新的記憶體位址,但是b裡面的列表記憶體位址還是

# 引用a裡面的列表記憶體位址,所以當a修改a裡面列表元素的值時候,b也會

# 發生改變,因為b裡面的列表和a裡面的列表指定同一塊記憶體位址。可以理

#解為兩個人離婚了,由於還有孩子,所以還藕斷絲漣

# 舉例:⑤

# a = [[1,2,3],[4,5,6]]

# b = copy.deepcopy(a)

# print(a) #執行結果:[[1, 2, 3], [4, 5, 6]]

# print(id(a)) #執行結果為:2559396978312

# print(b) #執行結果:[[1, 2, 3], [4, 5, 6]]

# print(id(b)) #執行結果:2559397186504

# a[0][0] = 'hellow'

# print(a) #執行結果為:[['hellow', 2, 3], [4, 5, 6]]

# print(b) #執行結果為:[[1, 2, 3], [4, 5, 6]]

# ⑤備註如下:

# 1、當b使用copy.deepcopy()深拷貝的時候,可以理解為b不僅外面的整體開闢了乙個新的

# 記憶體位址,b裡面包含的列表也開闢了新的記憶體位址和a裡面的記憶體位址沒有任何關係,

# 所以當a修改裡面列表元素的值時不會影響b裡面列表元素的值。可以理解為:兩個人已經

# 離婚了,由於沒有孩子,所以沒有任何瓜葛了。

python中深淺拷貝

先弄懂下面概念 變數 引用 物件 可變物件,不可變物件 切片 拷貝 淺拷貝,深拷貝 變數是乙個系統表的元素,擁有指向物件的鏈結的空間 物件是被分配的一塊記憶體,儲存其所代表的值 引用是自動形成的從變數到物件的指標 在python中不可變物件知 一旦建立就不可修改物件,包括字元創,元組,數字 在pyt...

Python 中的深淺拷貝

python 中的物件之間賦值時,時按照引用傳遞,如果需要拷貝物件 需要使用標準庫中的copy模組 1.copy.copy淺拷貝 只拷貝父物件,不會拷貝物件的內部的子物件 2.copy.deepcopy深拷貝 拷貝物件及其子物件 示例 encoding utf 8 import copy a 1,2...

python中的深淺拷貝

深淺拷貝 定義 1.淺拷貝 拷貝了最外層的物件,內部的元素只拷貝了乙個引用 2.深拷貝 外層的物件和內部的元素都拷貝 賦值 了一遍 術語 1.變數 是乙個系統表的元素,擁有指向物件的連線空間 2.物件 會在記憶體中占用一塊空間 3.引用 是自動形成的從變數到物件的指標 首位址,引用 4.型別 物件型...