為什麼python中字串和整數不可變

2021-03-04 08:54:36 字數 2013 閱讀 3783

1樓:必能

ython建立的每乙個變數都是乙個物件,python會管理變數的生命週期。

一次新的賦值,將建立乙個新

內的對容象,即使檔名相同,變數的標識也不相同。

例如 : x = a

print id(a)

x = a

print id (a)

你會看出兩者的內部標識並不相

從此處不難理解 ,字串是不可變的。字串的方法,只是新建的乙個物件,乙個新的字串

2樓:有名大卒

在python中,dict內儲存的是tuple型別,也就是用小括號包圍的,tuple型別的變數是不可以修改的

python中的可變資料型別和不可變資料型別的區別

3樓:匿名使用者

上面就是我遇到的問題,按照我的理解,featlabel這個列表經過函式呼叫後值應該還是空的,如果普通的引數,我的這種理解是完全正確的,但是為什麼列表featlabel會跟著改變呢?於是我聯想到了java裡面的像string這種引用資料型別,貌似他們有幾分相似之處。好了,問題說到這,接下來說一下問題的解決。

在python中的資料可以分為可變資料型別和不變資料型別。

可變資料型別:

像tuple,list,dict之類的變數就是可變資料型別,變數名儲存的是乙個位址,該位址指向乙個具體的物件,並且不管對變數的值即物件做怎麼樣的操作,都不會改變變數名儲存的位址。下面是乙個例子:

結果如下:

['hello', [1, 2, 3]]

39593224

可見,我們把列表作為引數傳入乙個函式時,在函式內我們對該列表進行了一些改變,由於變數儲存的位址沒有變(在函式內部和函式外部都是39593224),所以就算我們沒有故意通過return語句把該列表傳遞出來,該列表還是會在函式執行結束後跟著改變的。

不變資料型別:

不變資料型別的物件一旦發生改變,就會在記憶體中開闢乙個新的空間用於儲存新的物件,原來的變數名就會指向乙個新的位址。舉個例子:

def fun(labels):

labels = 'world'

print(id(labels))

if __name__ == '__main__':

labels = 'hello'

fun(labels)

print(labels, '\n', id(labels))

結果如下:

38578360

hello

39220984

python 中提到字串是不可變的,但是字串方法不就改變了字串,這不是矛盾了,求解答?

4樓:雙耳失明

python建立的每乙個bai變數都是du乙個物件,python會管理變數zhi的生命週期。

一次新dao的賦值,將建立乙個版新的物件,即使檔名相權同,變數的標識也不相同。

例如 : x = a

print id(a)

x = a

print id (a)

你會看出兩者的內部標識並不相

從此處不難理解 ,字串是不可變的。字串的方法,只是新建的乙個物件,乙個新的字串

5樓:匿名使用者

沒有改變字串,而是新建了乙個字串物件然後返回這個物件

軟體測試中,python可變資料型別和不可變資料型別?

6樓:草原上之狼

不可變資料型別抄的就是記憶體中不管有襲多少個引用

bai,相同的對du象只佔用了一塊內zhi存,但是它的缺點就是dao當需要對變數進行運算從而改變變數引用的物件的值時,由於是不可變的資料型別,所以必須建立新的物件,這樣就會使得一次次的改變建立了乙個個新的物件,不過不再使用的記憶體會被垃圾**器**。

其實其他語言,比如java也有類似的功能,就是一些基礎的數字,例如前256個,都是固定在靜態區的某個位置的,而不會隨著指標變數的變化,而導致所指向的位址變化。

python判斷字串中是否含有英文

使用isalpha 方法來進行判斷。python isalpha 方法檢測字串是否只由字母組成。如果字串至少有乙個字元並且所有字元都是字母則返回 true,否則返回 false。isalpha 方法要檢測的字元。它可以是乙個有效的字元 被轉換為 int 型別 也可以是 eof 表示無效的字元 擴充套...

c中字串為什麼有兩種形式,c中字串為什麼有兩種形式?cstyle和string有什麼區別?

c style 是乙個指標,或者char陣列,字串的末尾有 0字元 string是乙個stl中的類,用於處理字串,string有乙個方法可以返回乙個c style指標 string中還包含了很多處理字串需要的方法,一般不最強最快效率的情況下用string不容易出錯 c style 是最原始的,位元組...

輸入字串,將字串中的字母所有字元按ASCII碼公升序排列後輸出

include int main include stdio.h include stdlib.h int cmp char const void a,const void b int main 這是用快速排序做的 這就是乙個排序問題嘛 c語言 輸入任意長度的字串,將該字串中的字元按ascii碼值公...