成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Python 面試高頻問(wèn)題:可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型的區(qū)別

開發(fā) 后端
在講可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型之前我們要講一下引用的概念。python變量保存的是對(duì)象的引用,這個(gè)引用指向堆內(nèi)存里的對(duì)象,在堆中分配的對(duì)象分為兩類,一類是可變對(duì)象,一類是不可變對(duì)象。

Python可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型是一個(gè)基礎(chǔ)而且重要的考點(diǎn)。簡(jiǎn)單地說(shuō):這里的可變和不可變是指當(dāng)變量改變的時(shí)候,數(shù)據(jù)的地址是否會(huì)改變!

可變數(shù)據(jù)類型:如果改變了變量的值,相當(dāng)于是新建了一個(gè)對(duì)象(即地址會(huì)被改變)。

可變數(shù)據(jù)類型:變量的值發(fā)生變化,但是對(duì)象的地址不會(huì)改變。

不可變數(shù)據(jù)類型:元組,字符串,數(shù)值。

可變數(shù)據(jù)類型:字典,列表,集合。

引用

在講可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型之前我們要講一下引用的概念。python變量保存的是對(duì)象的引用,這個(gè)引用指向堆內(nèi)存里的對(duì)象,在堆中分配的對(duì)象分為兩類,一類是可變對(duì)象,一類是不可變對(duì)象。例如:s1="abc"。

其實(shí)變量s1 就是對(duì)象 abc的引用,s1指向了存儲(chǔ)abc的內(nèi)存地址,如果想看s1的地址值,可以使用函數(shù)id,id會(huì)把地址值轉(zhuǎn)換成十進(jìn)制。使用print(id(s1))即可,如下圖所示:

Python 面試高頻問(wèn)題:可變數(shù)據(jù)類型和不可變數(shù)據(jù)類型的區(qū)別

不可變數(shù)據(jù)類型

我們以字符串舉例,直接上代碼:

s1="abc"
print(id(s1))
s1="xyz"
print(id(s1))

輸出:

140712532603136
140712532603168

從輸出結(jié)果可見改變字符串類型變量的值,地址也會(huì)隨之變化。

我們接下來(lái)看這個(gè)實(shí)例,也是面試筆試中經(jīng)常出的題目。

#在上面代碼基礎(chǔ)上,編寫如下代碼:

s2=s1
print(id(s1))
print(id(s2))

輸出:

743316570224
743316570224

可以看到s2=s1 實(shí)際上是s2 和s1都指向了同一個(gè)地址。

我們繼續(xù),改變s2的值。

s2="def"
print(id(s1))
print(s1)
print(id(s2))
print(s2)

輸出:

879864758384
xyz
879889887984
def

看到這里,我們就能夠理解為什么改變了s2 的值并沒(méi)有影響s1的值。因?yàn)閟1 和s2指向了不同的地址,所以s1的值并沒(méi)有被改變!

可變數(shù)據(jù)類型

我們以列表舉例:

l = [1, 2, 3]
print(id(l))
l.remove(1) # 刪除元素
print(id(l))
l.append(4) # 增加元素
print(id(l))
l[1] = '8' # 修改元素
print(id(l))

輸出:

405927907912
405927907912
405927907912
405927907912

可以看到對(duì)列表進(jìn)行增刪改操作,列表的地址都沒(méi)有變化,只是改變了變量的值,而不會(huì)新建一個(gè)對(duì)象,變量引用的對(duì)象的地址也不會(huì)變化。

再看下面這個(gè)實(shí)例,與前面的字符串賦值實(shí)例類似。

l1=['a','b','c']
l2=l1
print(id(l1))
print(id(l2))
l2.append('d')
print("************")
print(id(l1))
print(l1)
print(id(l2))
print(l2)

輸出:

838366483528
838366483528
************
838366483528
['a', 'b', 'c', 'd']
838366483528
['a', 'b', 'c', 'd']

輸出結(jié)果這里就不再多做解釋了,因?yàn)?l1 和l2的地址相同,所以彼此間會(huì)產(chǎn)生影響。

list的拷貝

有的同學(xué)可能要問(wèn),如果想讓list 像字符串一樣拷貝并生成同值但是不同地址的兩個(gè)list,該如何操作呢?其實(shí)這個(gè)問(wèn)題的本質(zhì)是list直接賦值(用 = 是直接賦值)和拷貝的區(qū)別(拷貝又分為淺拷貝和深拷貝),我會(huì)再寫一篇文章來(lái)詳細(xì)介紹淺拷貝和深拷貝的相關(guān)知識(shí)點(diǎn),也請(qǐng)大家持續(xù)關(guān)注。

這里先介紹一種比較簡(jiǎn)單的方法進(jìn)行拷貝,使用list()構(gòu)造函數(shù),代碼如下:

l3=['x','y','z']
l4=list(l3)
print(id(l3))
print(id(l4))
l4.append('a')
print(l3)
print(l4)

輸出:

831456302152
831480344136
['x', 'y', 'z']
['x', 'y', 'z', 'a']

從結(jié)果可以看到,l3 和l4的地址不同,所以彼此間不會(huì)發(fā)生影響。我們還可以通過(guò)使用索引,列表生成式,copy()等方式使兩個(gè)列表指向不同的列表對(duì)象,這里就不再一一介紹了!

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2024-02-26 10:47:09

Python數(shù)據(jù)類型開發(fā)

2018-11-12 09:50:56

Python函數(shù)式編程數(shù)據(jù)結(jié)構(gòu)

2018-09-21 11:19:30

Lambda架構(gòu)函數(shù)數(shù)據(jù)系統(tǒng)

2025-02-08 13:23:27

JavaScript開發(fā)喚醒鎖

2010-01-14 14:30:09

VB.NET匿名類型

2016-08-18 14:13:55

JavaScript基本數(shù)據(jù)引用數(shù)據(jù)

2010-07-22 17:57:40

2019-08-12 11:40:48

數(shù)據(jù)庫(kù)SQLite3數(shù)據(jù)類型

2011-07-29 10:12:12

JavaScript

2010-10-15 13:28:34

MySql數(shù)據(jù)類型

2017-02-27 08:34:09

JavaScript數(shù)據(jù)引用

2022-07-26 08:07:03

Python淺拷貝深拷貝

2014-01-05 17:08:09

PostgreSQL數(shù)據(jù)類型

2011-05-26 13:54:04

Json

2010-08-10 17:17:59

2023-10-17 07:57:56

Python數(shù)據(jù)類型

2025-03-14 10:34:22

2010-03-11 15:56:15

Python列表

2011-03-09 14:36:44

synchronizevolatile

2017-07-10 13:38:07

MySQL數(shù)據(jù)類型整數(shù)類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 中文日韩在线视频 | 免费看一区二区三区 | 91精品在线播放 | 国产高清精品一区二区三区 | 久久久综合 | 午夜视频在线播放 | 偷偷操视频| 国产盗摄视频 | 亚洲色图图片 | 国产91一区| 亚洲人人 | 成年人免费看 | 久久三级av | 成人久久久久 | 欧美激情一区二区三区 | 精品国产乱码久久久久久蜜臀 | 国产亚洲精品久久午夜玫瑰园 | 91亚洲国产 | 中文字幕一区二区三区精彩视频 | 亚洲精品v日韩精品 | 成人免费视频 | 久久久久久久久久久福利观看 | 成人在线一区二区 | 日本不卡一区二区三区在线观看 | 精品啪啪 | 九九免费在线视频 | 欧美福利视频 | 国产伦精品一区二区三区照片91 | 中文字幕国产 | 九九九久久国产免费 | 欧美激情国产日韩精品一区18 | 91亚洲精品在线 | 成人午夜影院 | 日韩电影a | 国产精品国产三级国产aⅴ中文 | 涩涩鲁亚洲精品一区二区 | 一级欧美一级日韩片 | 日韩视频一区 | 皇色视频在线 | 亚洲国产一区在线 | 国产成人在线免费 |