python3 深淺copy對比詳解

2022-09-28 20:36:19 字數 2039 閱讀 9061

一、賦值對比

1、列表

l1 = [1,2,3]

l2 = l1

l1.append('a')

pri #[1, 2, 3, 'a'] [1, 2, 3, 'a']

print(id(l1),id(l2)) #43499848 43499848

#可以看到兩個列表的值以及id值相同,對應的是同乙個記憶體位址

2、字典

dic =

dic1 = dic

dic['age'] = 18

print(dic,dic1) #

print(id(dic),id(dic1)) #31157344 31157344

#可以看到兩個字典的值以及id值相同,對應的是同乙個記憶體位址

3、字串

s = 'alex'

s1 = s

s2 = s.replace('a','a')

print(s,s1,s2) #alex alex alex

print(id(s),id(s1),id(s2)) #31040208 310402www.cppcns.com08 31040376

#賦值是同乙個記憶體位址,替換字串後的變數s2是另外的位址

二、深淺copy

1、淺copy

對於淺copy來說,第一層建立的是新的記憶體位址。而從第二層開始,指向的是同乙個記憶體位址,所有,對於第二層以及更深的層數來說,保持一致性。

# 1、普通淺copy

l1 = [1,2,3,4]

l2 = l1.copy()

l1.append('a')

print(l1,l2) #[1, 2, 3, 4, 'a'] [1, 2, 3, 4]

print(id(l1),id(l2)) #37077320 37078664

#id記憶體位址不一樣,建立了兩個位址空間,乙個改變,另乙個不會變化

# 2、osjpa巢狀淺copy

import copy

l1 = [1,[22,33,44],3,4,]

l2 = copy.deepcopwww.cppcns.comy(l1)

# 改變第一層

l1[0] = 111

print(l1,l2) #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]

print(id(l1),id(l2)) #43238536 43239048

# 改變第二層

l1[1].append('a')

print(l1,l2) # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]

print(id(l1),id(l2)) #43238536 43239048

2、 深copy.deepcopy()

對於深copy來說,兩個是完全獨立的,改變任意乙個的元素(無論是多少層),另乙個絕不會改變。

import copy

l1 = [1,[22,33,44],3,4,]

l2 = copy.deepcopy(l1)

# 改變第一層

l1[0] = 111

print(l1,l2) #[111, [22, 33, 44], 3, 4] [1, [22, 33, 44], 3, 4]

print(id(l1),id(l2)) #43238536 43239048

# 改變第二層

l1[1].append('a')

print(l1,l2) # [111, [22, 33, 44, 'a'], 3, 4] [1, [22, 33, 44], 3, 4]

print(id(l1),id(l2)) #43238536 43239048

本文標題: python3 深淺copy對比詳解

本文位址: /jiaoben/python/267988.html

Python3 深淺拷貝

在python中物件的賦值其實就是物件的引用。當建立乙個物件,把它賦值給另乙個變數的時候,python並沒有拷貝這個物件,只是拷貝了這個物件的引用而已。1,變數 是乙個系統表的元素,擁有指向物件的連線空間。2,物件 被分配的一塊記憶體,儲存其所代表的值。3,引用 是自動形成的從變數到物件的指標。4,...

補充 python深淺copy

name liming lilongfei duanwenchao tangeng 11 yuxiaobin name2 name.copy 淺copy,只copy第一層 print name print name2 name 1 haha 當修改name的第一層時,name2不發生變化 name ...

python 深淺copy總結

總結 總結 假設l1為原資料,l2為deepcopy後的資料 1.淺copy,只能改變第一層的記憶體位址 不可變資料型別除外 2.深copy,能夠改變第一層和第二層的記憶體位址 不可變資料型別除外 3.不可變型別,位址不會發生變化,且不可使用copy 可以使用copy.deepcopy 4.對dee...