簡體   English   中英

python中的可變和不可變字符串

[英]Mutable and Immutable Strings in python

我只是在 python 中瀏覽可變和不可變結構。 據說 Python 中的“字符串是不可變的”即我們不能改變它們 考慮代碼:

str1='Rohit'
str1.replace('R','M')

這給出了輸出:

'Mohit'

現在,有人說它是指向字符串 'Rohit' 的變量 str1,在 str1.replace() 之后它指向 'Mohit' 考慮以下代碼:

'Rohit'.replace('R','M')

這也給了我輸出:

'Mohit'

那么“字符串是不可變的”是什么意思呢?

字符串上沒有任何允許更改字符串值的方法。 換句話說:字符串是不可變的。

當您調用str.replace會構建並返回一個字符串。

>>> s1 = 'Rohit'
>>> s2 = s1.replace('R', 'M')
>>> 
>>> s1
'Rohit'
>>> s2
'Mohit'

如您所見, s1仍然具有其原始值。

您可以通過檢查更改前后變量的 id 來檢查可變性

In [3]: s1 = 'Rohit'

In [4]: id(s1)
Out[4]: 140510191375440

In [5]: s1.replace('R', 'M')
Out[5]: 'Mohit'

In [6]: id(s1)
Out[6]: 140510191375440

字符串在 Python(和其他語言)中被稱為不可變的,因為一旦創建了初始字符串,作用於它的任何函數/方法都不會直接更改它,它們只是返回新字符串。

所以,在你的例子中

str1='Rohit'
str1.replace('R','M')

.replace調用之后,您應該嘗試在 REPL 中評估str1 您可能會驚訝地看到str1仍然保持值 'Rohit'。 .replace返回一個字符串,其中給定字符的所有實例都替換為指定字符。 您的 REPL 將打印返回的字符串,但之后它會丟失,因為您沒有將其分配給任何東西。

您的第二個示例大致相同,但使用字符串常量而不是像str1這樣的變量。

是的,Python 字符串肯定是不可變的。 讓我們假設你有

s = "Rohit"

現在s正確指向字符串對象“Rohit”。 當你做類似的事情時

s.replace("R", "M")

這不會改變s到位。 .replace 方法將用“M”替換“R”,然后返回新創建的對象。 在您的情況下,它將是 Mohit。 這就是您能夠將“Mohit”視為返回值但它不會改變s 的原因 它創建一個新字符串並返回它。

您得到這樣的輸出是因為該行代碼對字符串沒有任何作用,而是創建了一個新字符串,其中 R 替換為 M(您可以認為它返回了一個變量),並且在 python 中,當您只需鍵入變量的名稱時,它就會被打印出來在控制台上。 我認為這就是造成混亂的原因。

python中的不可變字符串

str1 = "Rohit" str1.replace("R", "M") print(str1)

輸出

Rohit

print(str1 + "hello")

Rohit hello

str2 = str1.replace("R","M")

print(str2)

輸出

Mohit

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM