中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

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

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

創(chuàng)新互聯(lián)建站專注于南岸網站建設服務及定制,我們擁有豐富的企業(yè)做網站經驗。 熱誠為您提供南岸營銷型網站建設,南岸網站制作、南岸網頁設計、南岸網站官網定制、小程序開發(fā)服務,打造南岸網絡公司原創(chuàng)品牌,更為您提供南岸網站排名全網營銷落地服務。id: 當一個對象被創(chuàng)建后,它的 id 就不會在改變,這里的 id 其實就是對象在內存中的地址,可以使用 id() 去查看對象在內存中地址。type: 和 id 一樣當對象唄創(chuàng)建之后,它的 type 也不能再被改變,type 決定了該對象所能夠支持的操作value: 對象的值

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

相關學習推薦:python視頻教程

不可變對象

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

Number: int, float, complexstringtuplefrozenset: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

從結果不難看出來,x 所指向的對象已經改變了,但是 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 值。一個不可變容器對象如果包含對可變對象的引用,當后者的值改變時,前者的值也會改變;但是該容器仍屬于不可變對象,因為它的 id 值不會改變的。

可變對象

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

listdictset

同樣的通過例子感受一下

例子

>>> 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 仍然指向同一個對象,所以不難得出結論,對于一個可變對象來說,修改 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: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)}')

看一下結果

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

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

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

分享標題:詳細分析之Python可變對象和不可變對象
網站鏈接:http://www.rwnh.cn/article18/cpogdp.html

成都網站建設公司_創(chuàng)新互聯(lián),為您提供網站營銷、網站內鏈、域名注冊云服務器、全網營銷推廣、App設計

廣告

聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

成都seo排名網站優(yōu)化
凤台县| 平遥县| 阜新市| 理塘县| 星子县| 孝感市| 泗水县| 怀宁县| 电白县| 洱源县| 灵台县| 蒙阴县| 广水市| 建阳市| 杂多县| 万州区| 六盘水市| 山阴县| 庐江县| 濮阳市| 营口市| 隆子县| 阿鲁科尔沁旗| 宜宾县| 绥德县| 奉节县| 石景山区| 吉安市| 麻城市| 兖州市| 朝阳市| 麻栗坡县| 内江市| 景东| 清远市| 桃园市| 盐城市| 吉木萨尔县| 北票市| 阳信县| 浙江省|