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

Python 面試高頻問題:可變數據類型和不可變數據類型的區別

開發 后端
在講可變數據類型和不可變數據類型之前我們要講一下引用的概念。python變量保存的是對象的引用,這個引用指向堆內存里的對象,在堆中分配的對象分為兩類,一類是可變對象,一類是不可變對象。

Python可變數據類型和不可變數據類型是一個基礎而且重要的考點。簡單地說:這里的可變和不可變是指當變量改變的時候,數據的地址是否會改變!

可變數據類型:如果改變了變量的值,相當于是新建了一個對象(即地址會被改變)。

可變數據類型:變量的值發生變化,但是對象的地址不會改變。

不可變數據類型:元組,字符串,數值。

可變數據類型:字典,列表,集合。

引用

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

其實變量s1 就是對象 abc的引用,s1指向了存儲abc的內存地址,如果想看s1的地址值,可以使用函數id,id會把地址值轉換成十進制。使用print(id(s1))即可,如下圖所示:

Python 面試高頻問題:可變數據類型和不可變數據類型的區別

不可變數據類型

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

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

輸出:

140712532603136
140712532603168

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

我們接下來看這個實例,也是面試筆試中經常出的題目。

#在上面代碼基礎上,編寫如下代碼:

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

輸出:

743316570224
743316570224

可以看到s2=s1 實際上是s2 和s1都指向了同一個地址。

我們繼續,改變s2的值。

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

輸出:

879864758384
xyz
879889887984
def

看到這里,我們就能夠理解為什么改變了s2 的值并沒有影響s1的值。因為s1 和s2指向了不同的地址,所以s1的值并沒有被改變!

可變數據類型

我們以列表舉例:

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

可以看到對列表進行增刪改操作,列表的地址都沒有變化,只是改變了變量的值,而不會新建一個對象,變量引用的對象的地址也不會變化。

再看下面這個實例,與前面的字符串賦值實例類似。

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']

輸出結果這里就不再多做解釋了,因為 l1 和l2的地址相同,所以彼此間會產生影響。

list的拷貝

有的同學可能要問,如果想讓list 像字符串一樣拷貝并生成同值但是不同地址的兩個list,該如何操作呢?其實這個問題的本質是list直接賦值(用 = 是直接賦值)和拷貝的區別(拷貝又分為淺拷貝和深拷貝),我會再寫一篇文章來詳細介紹淺拷貝和深拷貝的相關知識點,也請大家持續關注。

這里先介紹一種比較簡單的方法進行拷貝,使用list()構造函數,代碼如下:

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']

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

責任編輯:姜華 來源: 今日頭條
相關推薦

2024-02-26 10:47:09

Python數據類型開發

2018-11-12 09:50:56

Python函數式編程數據結構

2018-09-21 11:19:30

Lambda架構函數數據系統

2025-02-08 13:23:27

JavaScript開發喚醒鎖

2010-01-14 14:30:09

VB.NET匿名類型

2016-08-18 14:13:55

JavaScript基本數據引用數據

2010-07-22 17:57:40

2019-08-12 11:40:48

數據庫SQLite3數據類型

2011-07-29 10:12:12

JavaScript

2010-10-15 13:28:34

MySql數據類型

2017-02-27 08:34:09

JavaScript數據引用

2022-07-26 08:07:03

Python淺拷貝深拷貝

2014-01-05 17:08:09

PostgreSQL數據類型

2011-05-26 13:54:04

Json

2010-08-10 17:17:59

2025-03-14 10:34:22

2010-03-11 15:56:15

Python列表

2023-10-17 07:57:56

Python數據類型

2011-03-09 14:36:44

synchronizevolatile

2017-07-10 13:38:07

MySQL數據類型整數類型
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲精久 | 久久久久久影院 | 免费三级网 | 亚洲午夜视频 | 91精品国产91久久久久久密臀 | 亚洲国产精品久久久久秋霞不卡 | 欧美区在线观看 | 五月天综合网 | 色综合视频在线 | 亚洲一区二区 | 亚洲欧美国产精品久久 | 夜夜骑首页 | 日韩欧美在线播放 | 天堂色| 亚洲精品一区二区 | 国产精品视频偷伦精品视频 | 成人免费视频在线观看 | 日韩精品在线观看一区二区 | 人人爱干| 精品国产一区二区国模嫣然 | 亚洲人a| 亚洲欧美中文日韩在线v日本 | 国产精品18久久久久久久 | 亚洲免费一区二区 | 日韩欧美一区在线 | 欧美在线一区二区三区 | 国产www. | 国产精品第2页 | 亚洲综合在线播放 | 91 在线 | 中文字幕在线播放第一页 | 亚洲成人在线网 | av手机在线看 | 午夜精品影院 | 国产综合久久 | 日韩精品亚洲专区在线观看 | av网站在线播放 | 日本午夜免费福利视频 | 亚洲精品www久久久久久广东 | 97超碰人人草 | 99久久久无码国产精品 |