亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

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

瀏覽:36日期:2022-07-18 09:09:07

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

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

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

不可變對象

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

Number: int, float, complex string tuple frozenset:set 的另外一種類型

讓我們通過例子感受一下

例子

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

這里創建了兩個 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

從結果不難看出來,x 所指向的對象已經改變了,但是 1 并沒有改變。這就是不可變對象,對于不可變對象來說,一旦創建之后就不允許被改變。

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

>>> 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 值。一個不可變容器對象如果包含對可變對象的引用,當后者的值改變時,前者的值也會改變;但是該容器仍屬于不可變對象,因為它的 id 值不會改變的。

可變對象

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

list dict set

同樣的通過例子感受一下

例子

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

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

c[0]=4

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

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

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

函數參數

對于可變對象和不可變對象,他們兩者在函數當作參數傳遞的時候表現也有所不同

例子

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)}’)

看一下結果

1:[5, 6], id:44577079122 id:44577079123 id:44577079124:[5, 6, 10], id:4457707912

在看另外一個例子

eg1

def add_num(number): print(f’2:{id(number)}’) number += 1 print(f’3:{id(number)}’)num = 1print(f’1:{num}, id:{id(num)}’) add_num(num)print(f’4:{num}, id:{id(num)}’)

看一下結果

1:1, id:43437684162 id:43437684163 id:43437684484:1, id:4343768416

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

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

以上就是詳細分析Python可變對象和不可變對象的詳細內容,更多關于Python可變對象和不可變對象的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 亚洲国产欧美自拍 | 国产精品嫩草视频永久网址 | 黄色一级片美国 | 久久99爰这里有精品国产 | 51精品| 欧美一级精品高清在线观看 | 成人老司机深夜福利久久 | 中文字幕国产综合 | 精品国产品香蕉在线观看75 | 草逼视频网址 | 国产精品色综合久久 | 免费看欧美一级特黄a毛片 免费看欧美一级特黄α大片 | 亚洲人交性视频 | 在线播放精品视频 | 亚洲国产欧美精品一区二区三区 | 国产精品视频观看 | 亚洲精品国产综合一线久久 | 亚洲国产精品人久久电影 | 日韩国产中文字幕 | 久久国产精品免费网站 | 97久久久久国产精品嫩草影院 | 伊人影院中文字幕 | 黄色一级片在线免费观看 | 日本不卡高清中文字幕免费 | 国产91在线 | 欧美 | 欧美日韩国产免费一区二区三区 | 日韩免费视频观看 | 在线播放人成午夜免费视频 | 久久综合九色综合97婷婷群聊 | 久久99热在线观看7 久久99热只有视精品6国产 | 国产精品电影久久 | 亚洲成人在线观看视频 | 男女爱爱视频在线观看 | 免费黄色片视频 | 国内日本精品视频在线观看 | 男女性黄色 | 二区三区不卡不卡视频 | 色噜噜国产在线91蝌蚪 | 黄色成人免费观看 | 女18一级大黄毛片免费女人 | 欧美高清不卡视频 |