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

詳細(xì)分析Python可變對(duì)象和不可變對(duì)象

 更新時(shí)間:2020年07月09日 10:40:37   作者:Leetao  
這篇文章主要介紹了Python可變對(duì)象和不可變對(duì)象的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下

在 Python 中一切都可以看作為對(duì)象。每個(gè)對(duì)象都有各自的 id, type 和 value。

  1. id: 當(dāng)一個(gè)對(duì)象被創(chuàng)建后,它的 id 就不會(huì)在改變,這里的 id 其實(shí)就是對(duì)象在內(nèi)存中的地址,可以使用 id() 去查看對(duì)象在內(nèi)存中地址。
  2. type: 和 id 一樣當(dāng)對(duì)象唄創(chuàng)建之后,它的 type 也不能再被改變,type 決定了該對(duì)象所能夠支持的操作
  3. value: 對(duì)象的值

一個(gè)對(duì)象可變與否就在于 value 值是否支持改變。

不可變對(duì)象

常見的不可變對(duì)象(immutable objects):

  1. Number: int, float, complex
  2. string
  3. tuple
  4. frozenset:set 的另外一種類型

讓我們通過例子感受一下

例子

>>> x=1
>>> y=x
>>> id(x)==id(y)
True
>>> id(1)==id(y)
True

這里創(chuàng)建了兩個(gè) int 對(duì)象,并且讓 x,y 指向同一個(gè)對(duì)象,然后我們?cè)囍薷囊幌?x,讓 x+1

>>>x=x+1

這個(gè)時(shí)候 x 的 id 值和 y 的 id 以及 1 的 id 還一樣嗎?

>>> x=x+1
>>> id(x)==id(y)
False
>>> id(x)==id(1)
False
>>> id(1)==id(y)
True

從結(jié)果不難看出來,x 所指向的對(duì)象已經(jīng)改變了,但是 1 并沒有改變。這就是不可變對(duì)象,對(duì)于不可變對(duì)象來說,一旦創(chuàng)建之后就不允許被改變。

注意: 不可變并不嚴(yán)格等同絕對(duì)的不可變

>>> a=([1],2,3)
>>> id(a)
4338862696
>>> id(a[0])
4338949128
>>> a[0][0]=0
>>> id(a)
4338862696
>>> id(a[0])
4338949128

從上面的例子不難看出,我們改變了 a[0] 的值,但是并沒有影響它的 id 值。一個(gè)不可變?nèi)萜鲗?duì)象如果包含對(duì)可變對(duì)象的引用,當(dāng)后者的值改變時(shí),前者的值也會(huì)改變;但是該容器仍屬于不可變對(duì)象,因?yàn)樗?id 值不會(huì)改變的。

可變對(duì)象

常見的可變對(duì)象(mutable objects):

  1. list
  2. dict
  3. set

同樣的通過例子感受一下

例子

>>> c = [1,2,3]
>>> b = c
>>> id(b)==id(c)
True

創(chuàng)建兩個(gè) list 對(duì)象,并且讓 c,d 指向同一個(gè)對(duì)象,然后我們?cè)囍薷囊幌?c

c[0]=4

這個(gè)時(shí)候在看一下兩個(gè)對(duì)象的 id 值是否一致

>>> id(c)==id(b)
True

修改之后,c,d 仍然指向同一個(gè)對(duì)象,所以不難得出結(jié)論,對(duì)于一個(gè)可變對(duì)象來說,修改 value 值并不會(huì)對(duì)它的 id 造成任何影響

函數(shù)參數(shù)

對(duì)于可變對(duì)象和不可變對(duì)象,他們兩者在函數(shù)當(dāng)作參數(shù)傳遞的時(shí)候表現(xiàn)也有所不同

例子

eg0

def update_list(nums_list):
  print(f'2 id:{id(nums_list)}')
  nums_list += [10]
  print(f'3 id:{id(nums_list)}')

  
number_list = [5, 6]
print(f'1:{number_list}, id:{id(number_list)}')   
update_list(number_list)
print(f'4:{number_list}, id:{id(number_list)}') 

看一下結(jié)果

1:[5, 6], id:4457707912
2 id:4457707912
3 id:4457707912
4:[5, 6, 10], id:4457707912

在看另外一個(gè)例子

eg1

def add_num(number):
  print(f'2:{id(number)}')
  number += 1
  print(f'3:{id(number)}')


num = 1
print(f'1:{num}, id:{id(num)}')   
add_num(num)
print(f'4:{num}, id:{id(num)}')   

看一下結(jié)果

1:1, id:4343768416
2 id:4343768416
3 id:4343768448
4:1, id:4343768416

有其他有些文章中,上面 eg0 被稱為引用傳遞,eg1 被稱為值傳遞。然而在官方文檔中,并沒有找到有關(guān)的這兩個(gè)名詞的任何內(nèi)容,或者這種方式并不是上述的兩者任意一種。

這里的重點(diǎn)是:對(duì)于可變對(duì)象,在函數(shù)中的值的改變,會(huì)導(dǎo)致對(duì)象改變;對(duì)于不可變對(duì)象,在函數(shù)中值的改變,對(duì)其不會(huì)造成任何影響

以上就是詳細(xì)分析Python可變對(duì)象和不可變對(duì)象的詳細(xì)內(nèi)容,更多關(guān)于Python可變對(duì)象和不可變對(duì)象的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python3.6正式版新特性預(yù)覽

    Python3.6正式版新特性預(yù)覽

    Python3.6計(jì)劃在2016-12-16正式發(fā)布。截止目前,PSF 已經(jīng)發(fā)布了 9 個(gè)測(cè)試版本。在新版本正式發(fā)布之前,我們一起來體驗(yàn)一下都會(huì)有哪些重要的新特性。
    2016-12-12
  • Python 使用 Pillow 模塊給圖片添加文字水印的方法

    Python 使用 Pillow 模塊給圖片添加文字水印的方法

    這篇文章主要介紹了Python 使用 Pillow 模塊給圖片添加文字水印的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-08-08
  • python使用Thread的setDaemon啟動(dòng)后臺(tái)線程教程

    python使用Thread的setDaemon啟動(dòng)后臺(tái)線程教程

    這篇文章主要介紹了python使用Thread的setDaemon啟動(dòng)后臺(tái)線程教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-04-04
  • 關(guān)于pycharm?python3.7成功安裝dlib庫的問題

    關(guān)于pycharm?python3.7成功安裝dlib庫的問題

    這篇文章主要介紹了pycharm?python3.7成功安裝dlib庫的解決方法,本文分步驟給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-12-12
  • opencv python 圖像輪廓/檢測(cè)輪廓/繪制輪廓的方法

    opencv python 圖像輪廓/檢測(cè)輪廓/繪制輪廓的方法

    這篇文章主要介紹了opencv python 圖像輪廓/檢測(cè)輪廓/繪制輪廓的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • Python數(shù)據(jù)可視化之使用matplotlib繪制簡(jiǎn)單圖表

    Python數(shù)據(jù)可視化之使用matplotlib繪制簡(jiǎn)單圖表

    這篇文章主要為大家詳細(xì)介紹了使用matplotlib繪制簡(jiǎn)單圖表的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • python編程測(cè)試電腦開啟最大線程數(shù)實(shí)例代碼

    python編程測(cè)試電腦開啟最大線程數(shù)實(shí)例代碼

    這篇文章主要介紹了python編程測(cè)試電腦開啟最大線程數(shù)實(shí)例代碼,分享了相關(guān)代碼示例,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下
    2018-02-02
  • Python繪制簡(jiǎn)單散點(diǎn)圖的方法

    Python繪制簡(jiǎn)單散點(diǎn)圖的方法

    這篇文章主要為大家詳細(xì)介紹了Python繪制簡(jiǎn)單散點(diǎn)圖的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-04-04
  • 深入詳解Python如何獲取音視頻時(shí)長(zhǎng)

    深入詳解Python如何獲取音視頻時(shí)長(zhǎng)

    這篇文章主要為大家詳細(xì)介紹了一個(gè)Python腳本,可以通過moviepy庫來獲取音視頻文件的時(shí)長(zhǎng),并將結(jié)果寫入日志文件,有需要的小伙伴可以了解下
    2025-08-08
  • python TK庫簡(jiǎn)單應(yīng)用(實(shí)時(shí)顯示子進(jìn)程輸出)

    python TK庫簡(jiǎn)單應(yīng)用(實(shí)時(shí)顯示子進(jìn)程輸出)

    這篇文章主要介紹了python TK庫簡(jiǎn)單應(yīng)用(實(shí)時(shí)顯示子進(jìn)程輸出),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10

最新評(píng)論

太康县| 阿瓦提县| 伽师县| 铁岭市| 谢通门县| 泾川县| 稷山县| 浮山县| 科尔| 体育| 扬中市| 新巴尔虎右旗| 万山特区| 磴口县| 庄河市| 依安县| 三穗县| 龙山县| 弋阳县| 开鲁县| 中阳县| 专栏| 镶黄旗| 乐安县| 儋州市| 双牌县| 贵定县| 渝北区| 台北市| 宁晋县| 泉州市| 图们市| 漯河市| 稻城县| 尼木县| 措美县| 黄梅县| 衡山县| 琼结县| 白河县| 隆尧县|