欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳細分析Python可變對象和不可變對象

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

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

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

一個對象可變與否就在于 value 值是否支持改變。

不可變對象

常見的不可變對象(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)建了兩個 int 對象,并且讓 x,y 指向同一個對象,然后我們試著修改一下 x,讓 x+1

>>>x=x+1

這個時候 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 所指向的對象已經(jīng)改變了,但是 1 并沒有改變。這就是不可變對象,對于不可變對象來說,一旦創(chuàng)建之后就不允許被改變。

注意: 不可變并不嚴格等同絕對的不可變

>>> 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 值。一個不可變?nèi)萜鲗ο笕绻瑢勺儗ο蟮囊?,當后者的值改變時,前者的值也會改變;但是該容器仍屬于不可變對象,因為它的 id 值不會改變的。

可變對象

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

  1. list
  2. dict
  3. set

同樣的通過例子感受一下

例子

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

創(chuàng)建兩個 list 對象,并且讓 c,d 指向同一個對象,然后我們試著修改一下 c

c[0]=4

這個時候在看一下兩個對象的 id 值是否一致

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

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

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

對于可變對象和不可變對象,他們兩者在函數(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

在看另外一個例子

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)的這兩個名詞的任何內(nèi)容,或者這種方式并不是上述的兩者任意一種。

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

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

相關(guān)文章

  • 大語言模型的開發(fā)利器langchainan安裝使用快速入門學習

    大語言模型的開發(fā)利器langchainan安裝使用快速入門學習

    這篇文章主要為大家介紹了大語言模型的開發(fā)利器langchain安裝使用快速入門學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-07-07
  • Python快速轉(zhuǎn)換numpy數(shù)組中Nan和Inf的方法實例說明

    Python快速轉(zhuǎn)換numpy數(shù)組中Nan和Inf的方法實例說明

    今天小編就為大家分享一篇關(guān)于Python快速轉(zhuǎn)換numpy數(shù)組中Nan和Inf的方法實例說明,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 淺談python元素如何去重,去重后如何保持原來元素的順序不變

    淺談python元素如何去重,去重后如何保持原來元素的順序不變

    這篇文章主要介紹了淺談python元素如何去重,去重后如何保持原來元素的順序不變?具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • python實現(xiàn)360的字符顯示界面

    python實現(xiàn)360的字符顯示界面

    這篇文章主要介紹了python實現(xiàn)360的字符顯示界面示例,需要的朋友可以參考下
    2014-02-02
  • Python爬取科目四考試題庫的方法實現(xiàn)

    Python爬取科目四考試題庫的方法實現(xiàn)

    這篇文章主要介紹了Python爬取科目四考試題庫的方法實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • 詳解Python的Django框架中的模版繼承

    詳解Python的Django框架中的模版繼承

    這篇文章主要介紹了詳解Python的Django框架中的模版繼承,就像Python中面對對象的方法繼承道理類似,需要的朋友可以參考下
    2015-07-07
  • 如何在Flask中進行異常處理實例解析

    如何在Flask中進行異常處理實例解析

    這篇文章主要為大家介紹了如何在Flask中進行異常處理實例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-11-11
  • Python中的變量與常量

    Python中的變量與常量

    本文基于Python基礎(chǔ),主要介紹了Python基礎(chǔ)中變量和常量的區(qū)別,對于變量的用法做了詳細的講解,用豐富的案例 ,代碼效果圖的展示幫助大家更好理解,需要的朋友可以參考下
    2021-11-11
  • 淺析NumPy 切片和索引

    淺析NumPy 切片和索引

    這篇文章主要介紹了NumPy 切片和索引的相關(guān)資料,幫助大家更好的理解和學習NumPy的相關(guān)知識,感興趣的朋友可以了解下。
    2020-09-09
  • python中閉包Closure函數(shù)作為返回值的方法示例

    python中閉包Closure函數(shù)作為返回值的方法示例

    閉包(closure)是函數(shù)式編程的重要的語法結(jié)構(gòu),Python也支持這一特性,下面這篇文章主要給大家介紹了關(guān)于python中閉包Closure函數(shù)作為返回值的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下。
    2017-12-12

最新評論