日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python 实例对象 浅拷贝_Python3 入门教程——浅拷贝深拷贝差别

發(fā)布時(shí)間:2025/5/22 python 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python 实例对象 浅拷贝_Python3 入门教程——浅拷贝深拷贝差别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

在 Python 中提供了一個(gè)用于拷貝操作的 copy 模塊,該模塊中提供 淺拷貝 和 深拷貝 兩種操作,其中:

淺拷貝:只是將對(duì)象管理地址進(jìn)行打包復(fù)制,其內(nèi)部的元素的并未進(jìn)行復(fù)制,而是使用舊的存儲(chǔ)地址。

深拷貝 :是將對(duì)象中的所有元素進(jìn)行復(fù)制,然后重新開(kāi)辟空間來(lái)存儲(chǔ)。

對(duì)象和內(nèi)存

對(duì)象和內(nèi)存中的值是映射的關(guān)系,當(dāng)需要取內(nèi)存中的值的時(shí)候,需要通過(guò)其變量名去獲取。

內(nèi)存中的值是單一的,但其映射的對(duì)象可以是多個(gè),所以某一個(gè)對(duì)象修改其內(nèi)存的值后,其所有的映射到該內(nèi)存上的對(duì)象都會(huì)刷新到最新的值。

實(shí)例如下:

>>> a = [1,2,3] # 定義一個(gè)變量(對(duì)象)

>>>

>>> b = a # 將變量的 a 的值賦給變量 b

>>> id(a) # 查看 a 的存儲(chǔ)內(nèi)存空間

3070831436L

>>> id(b) # 查看 b 的存儲(chǔ)內(nèi)存空間

3070831436L

>>>

>>> a.append(4) # 給 a 對(duì)象列表,添加一個(gè)新的元素 ‘4’

>>> a # 查看 a 的值

[1, 2, 3, 4]

>>> b # 查看 b 的值

[1, 2, 3, 4]

>>>

通過(guò)以上可以看到,不同變量之間,相同的值存儲(chǔ)的內(nèi)存空間是一樣的;當(dāng)使用 a 變量修改其內(nèi)容時(shí),b 變量的值也會(huì)放生改變。

淺拷貝

特點(diǎn):淺拷貝只復(fù)制變量的整體引用地址,不會(huì)復(fù)制變量?jī)?nèi)部元素的地址。當(dāng)內(nèi)部元素發(fā)生變化時(shí),復(fù)制后的值和會(huì)隨著賦值對(duì)象的變化而變化。

實(shí)例如下:

>>> import copy

>>> a = [1,2,['a','b'],3] # 定義嵌套列表

>>> b = copy.copy( a ) # 復(fù)制a(淺拷貝)

>>> a

[1, 2, ['a', 'b'], 3]

>>> b

[1, 2, ['a', 'b'], 3]

>>> id(a)

3070610124L # 查看 a 與 b 變量的地址

>>> id(b)

3070631500L

#查看列表 a 與 b 中第 2 個(gè)元素的地址:

>>> id(a[1])

163477668

>>> id(b[1])

163477668

#查看列表 a 與 b 中的第 3 個(gè)元素(嵌套列表)的地址:

>>> id(a[2])

3070631436L

>>> id(b[2])

3070631436L

#可見(jiàn)它們的地址還是同一個(gè)存儲(chǔ)地址

# 接下來(lái)是改變 a 的值,然后再查看 b 的值:

>>> a[2].append('c')

>>> a

[1, 2, ['a', 'b', 'c'], 3]

>>> b

[1, 2, ['a', 'b', 'c'], 3]

分析:通過(guò)觀察可知 淺拷貝時(shí),當(dāng)改變?cè)貎?nèi)部的值時(shí),復(fù)制后對(duì)象的值,會(huì)隨著賦值前對(duì)象值的變化而變化。

由于數(shù)字類(lèi)型為不可變類(lèi)型,所以復(fù)制前后的存儲(chǔ)位置是一致的,并不存在同值不同存儲(chǔ)位置的情況。

因?yàn)?數(shù)字類(lèi)型 為不可變類(lèi)型,所以這里不加以比較!

提示:在大列表中 添加/修改 元素,復(fù)制后的值不受影響。

深拷貝

特點(diǎn):深拷貝會(huì)將數(shù)據(jù)全部復(fù)制,然后重新開(kāi)辟新的空間來(lái)儲(chǔ)存該值。所以,復(fù)制后的值都是相對(duì)獨(dú)立的,后期使用并不受復(fù)制前的對(duì)象所影響。

基本語(yǔ)法:

deepcopy(x, memo=None, _nil=[])

參數(shù)說(shuō)明:x 是賦值的對(duì)象 、memo 和 _nil 參數(shù)可缺省。

實(shí)例如下:

>>> import copy

>>> a = [4,5,['a','b'],6]

>>> b = copy.deepcopy(a) # 使用深拷貝復(fù)制 a 對(duì)象

>>> a

[4, 5, ['a', 'b'], 6]

>>> b

[4, 5, ['a', 'b'], 6]

>>>

#查看列表 a 和 b 中的嵌套列表,可見(jiàn)它們的地址是獨(dú)立的:

>>> id(a[2])

3070658220L

>>> id(b[2])

3069923596L

# 修改 a 列表中的嵌套列表,觀察其變化:

>>> a[2].append('c')

>>> a

[4, 5, ['a', 'b', 'c'], 6, 'c']

>>> b

[4, 5, ['a', 'b'], 6]

# 可見(jiàn)修改 a 后 b 也不會(huì)發(fā)生任何的變化

分析:通過(guò)以上可見(jiàn),采用深拷貝操作后,是將被復(fù)制對(duì)象的所有值進(jìn)行拷貝,然后重新開(kāi)辟新的存儲(chǔ)單元來(lái)存儲(chǔ)拷貝后的內(nèi)容,所以復(fù)制后的內(nèi)容并不受前面被復(fù)制對(duì)象的改變而改變。

喜歡 (0)or分享 (0)

總結(jié)

以上是生活随笔為你收集整理的python 实例对象 浅拷贝_Python3 入门教程——浅拷贝深拷贝差别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。