最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python基礎(chǔ)之賦值,淺拷貝,深拷貝的區(qū)別

 更新時間:2021年04月30日 14:25:09   作者:心煩啊  
這篇文章主要介紹了Python基礎(chǔ)之賦值,淺拷貝,深拷貝的區(qū)別,文中有非常詳細(xì)的代碼示例,對正在學(xué)習(xí)python基礎(chǔ)的小伙伴們也有非常好的幫助,需要的朋友可以參考下

一、賦值

不會開辟新的內(nèi)存空間,只是復(fù)制了新對象的引用。所以當(dāng)一個數(shù)據(jù)發(fā)生變化時,另外一個數(shù)據(jù)也會隨之改變。

二、淺拷貝

創(chuàng)建新對象,其內(nèi)容是對原對象的引用。淺拷貝之所以稱為淺拷貝,是因為它僅僅只拷貝了第一層,即只拷貝了最外層的對象本身,內(nèi)部的元素都只是拷貝了一個引用而已,即內(nèi)部元素如果被修改,則另外一個數(shù)據(jù)也會發(fā)生變化。

淺拷貝的三種形式:

A = [1, 2, 3, 4]
  • 切片操作
# 第1種
B = A[:]
# 第2種
B = [a for a in A]
  • 工廠函數(shù)
B = list(A)
  • copy函數(shù)
B = copy.copy(A)

淺拷貝要分兩種情況進(jìn)行討論:

1)當(dāng)淺拷貝的值是不可變對象(例如字符串、元組、數(shù)值類型)時,和賦值情況一樣,對象的內(nèi)存地址(id())與淺拷貝原來的值一致。

2)當(dāng)淺拷貝的值是可變對象(例如列表、字典、集合等)時,也需要分兩種情況討論:

首先,原來值的內(nèi)存地址與拷貝后的內(nèi)存地址不同。

  • 當(dāng)要拷貝的對象里面,沒有可變的子對象時,原來值(拷貝值)的改變并不會影響拷貝值(原來值)。
  • 當(dāng)要拷貝的對象里面,有可以改變的子對象時,改變該子對象,原來值和拷貝值之間會互相影響。

三、深拷貝

深拷貝拷貝出來的對象是一個全新的對象,和原來的對象沒有任何的關(guān)聯(lián)。改變原有對象不會影響新的拷貝對象。

四、例子

  • 不可變對象
import copy
# 不可變對象
# A = (1, 2, 'hello')   # 元組
# A = 1                 # 數(shù)值
A = 'hello'             # 字符串

print("********賦值********")
B = A
print(id(A))
print(id(B))
print(A)
print(B)

print("********淺拷貝********")
B = copy.copy(A)
print(id(A))
print(id(B))
print(A)
print(B)

print("********深拷貝********")
B = copy.deepcopy(A)
print(id(A))
print(id(B))
print(A)
print(B)

結(jié)果:

********賦值********
1894005658264
1894005658264
hello
hello
********淺拷貝********
1894005658264
1894005658264
hello
hello
********深拷貝********
1894005658264
1894005658264
hello
hello

  • 可變對象
import copy
# 可變對象
A = [1, 2, 3]

print("********賦值********")
B = A
print(id(A))
print(id(B))
print(A)
print(B)

print("********淺拷貝********")
B = copy.copy(A)
print(id(A))
print(id(B))
print(A)
print(B)

print("********深拷貝********")
B = copy.deepcopy(A)
print(id(A))
print(id(B))
print(A)
print(B)

結(jié)果:

********賦值********
1602694308360
1602694308360
[1, 2, 3]
[1, 2, 3]
********淺拷貝********
1602694308360
1602694308424
[1, 2, 3]
[1, 2, 3]
********深拷貝********
1602694308360
1602950316296
[1, 2, 3]
[1, 2, 3]

  • 可變對象修改外層
import copy
# 可變對象
A = [1, 2, 3, [11, 10, 20]]

# 可變對象的外層修改
B1 = A                   # 賦值
B2 = copy.copy(A)        # 淺拷貝
B3 = copy.deepcopy(A)    # 深拷貝
A.append(4)
print("********賦值********")

print(id(A))
print(id(B1))
print(A)
print(B1)

print("********淺拷貝********")
print(id(A))
print(id(B2))
print(A)
print(B2)

print("********深拷貝********")
print(id(A))
print(id(B3))
print(A)
print(B3)

結(jié)果:

********賦值********
2215309238856
2215309238856
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20], 4]
********淺拷貝********
2215309238856
2215593496776
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20]]
********深拷貝********
2215309238856
2215593518024
[1, 2, 3, [11, 10, 20], 4]
[1, 2, 3, [11, 10, 20]]

  • 可變對象修改內(nèi)層
import copy
# 可變對象
A = [1, 2, 3, [11, 10, 20]]

# 可變對象的內(nèi)層修改
B1 = A                   # 賦值
B2 = copy.copy(A)        # 淺拷貝
B3 = copy.deepcopy(A)    # 深拷貝
A[3].append(4)
print("********賦值********")

print(id(A))
print(id(B1))
print(A)
print(B1)

print("********淺拷貝********")
print(id(A))
print(id(B2))
print(A)
print(B2)

print("********深拷貝********")
print(id(A))
print(id(B3))
print(A)
print(B3)

結(jié)果

********賦值********
2288591069768
2288591069768
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20, 4]]
********淺拷貝********
2288591069768
2288847138760
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20, 4]]
********深拷貝********
2288591069768
2288847168264
[1, 2, 3, [11, 10, 20, 4]]
[1, 2, 3, [11, 10, 20]]

到此這篇關(guān)于Python基礎(chǔ)之賦值,淺拷貝,深拷貝的區(qū)別的文章就介紹到這了,更多相關(guān)Python賦值 淺拷貝 深拷貝的區(qū)別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python利用Matplotlib繪圖無法顯示中文字體的兩種解決方案

    Python利用Matplotlib繪圖無法顯示中文字體的兩種解決方案

    matplotlib 是python最著名的繪圖庫,它提供了一整套和matlab相似的命令A(yù)PI,這篇文章主要給大家介紹了關(guān)于Python利用Matplotlib繪圖無法顯示中文字體的兩種解決方案,需要的朋友可以參考下
    2024-03-03
  • Django實現(xiàn)前后端登錄

    Django實現(xiàn)前后端登錄

    這篇文章主要介紹了Django實現(xiàn)前后端登錄的示例,幫助大家更好的理解和學(xué)習(xí)使用Django,感興趣的朋友可以了解下
    2021-04-04
  • Python列出一個文件夾及其子目錄的所有文件

    Python列出一個文件夾及其子目錄的所有文件

    這篇文章主要介紹了Python列出一個文件夾及其子目錄的所有文件的方法,和python列出文件夾下的所有文件的四種方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • Python中的HTTP請求庫Requests的具體使用

    Python中的HTTP請求庫Requests的具體使用

    Python作為一種功能強大且易于學(xué)習(xí)的編程語言,提供了許多用于處理HTTP請求的庫,其中,Requests庫是最受歡迎的選擇之一,本文主要介紹了Python中的HTTP請求庫Requests的具體使用,感興趣的可以了解一下
    2023-12-12
  • Python?中的?list、tuple、set、dict的底層實現(xiàn)小結(jié)

    Python?中的?list、tuple、set、dict的底層實現(xiàn)小結(jié)

    本文詳細(xì)介紹了Python中四種常用數(shù)據(jù)結(jié)構(gòu)——list、tuple、set和dict的底層實現(xiàn),包括它們的存儲方式、性能特點以及適用場景,感興趣的朋友一起看看吧
    2025-03-03
  • python庫Celery異步發(fā)送電子郵件定時生成報告實戰(zhàn)示例

    python庫Celery異步發(fā)送電子郵件定時生成報告實戰(zhàn)示例

    這篇文章主要介紹了python庫Celery異步發(fā)送電子郵件定時生成報告實戰(zhàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • 用 Python 檢測兩個文本文件的相似性的幾種實現(xiàn)方法

    用 Python 檢測兩個文本文件的相似性的幾種實現(xiàn)方法

    Python 提供了多種方法來實現(xiàn)這一功能,包括基于字符串匹配、詞頻統(tǒng)計和機(jī)器學(xué)習(xí)的方法,這篇文章主要介紹了用 Python 檢測兩個文本文件的相似性的幾種方法,需要的朋友可以參考下
    2025-04-04
  • Python實現(xiàn)多線程下載腳本的示例代碼

    Python實現(xiàn)多線程下載腳本的示例代碼

    這篇文章主要介紹了Python實現(xiàn)多線程下載腳本的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-04-04
  • 只用40行Python代碼就能寫出pdf轉(zhuǎn)word小工具

    只用40行Python代碼就能寫出pdf轉(zhuǎn)word小工具

    今天咱們介紹一個pdf轉(zhuǎn)word的免費小工具,滿足這么一個不常見但是偶爾會出來煩人的需求文中有非常詳細(xì)的代碼示例,對小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • 詳解Python單元測試的兩種寫法

    詳解Python單元測試的兩種寫法

    python的兩個單元測試包分別是 doctest 和 unittest,這兩個包的使用起來各有長處,適用于不同的場景,這篇文章主要介紹了Python單元測試的兩種寫法,需要的朋友可以參考下
    2022-07-07

最新評論

蓝山县| 永善县| 石台县| 宕昌县| 广元市| 临海市| 孙吴县| 天津市| 额尔古纳市| 蕉岭县| 健康| 濮阳市| 屏东县| 荆州市| 大厂| 汉阴县| 体育| 衡东县| 和田市| 酒泉市| 汾西县| 高唐县| 文山县| 靖边县| 大兴区| 淳化县| 蛟河市| 青冈县| 图木舒克市| 微山县| 德兴市| 修水县| 许昌县| 双江| 门头沟区| 平昌县| 宝清县| 长春市| 汉中市| 宣城市| 平塘县|