string不可變的原理 python中的immutable和mutable(不可變與可變)應(yīng)該怎么理解?
python中的immutable和mutable(不可變與可變)應(yīng)該怎么理解?Python數(shù)據(jù)類型分為可變和不可變。不可變類型包含字符串(STR)、整數(shù)(int)、元組(tuple);變量類型包含列
python中的immutable和mutable(不可變與可變)應(yīng)該怎么理解?
Python數(shù)據(jù)類型分為可變和不可變。不可變類型包含字符串(STR)、整數(shù)(int)、元組(tuple);變量類型包含列表(list)、字典(dict)。它是否為變量類型取決于內(nèi)存單元的值是否可以更改。如果內(nèi)存單元的值不可更改,在對對象本身進(jìn)行操作時(shí),必須在內(nèi)存的另一部分申請另一個(gè)內(nèi)存單元(因?yàn)榕f的內(nèi)存單元是不可變的),舊的內(nèi)存單元將被丟棄(如果有其他的ref,ref數(shù)將減少1,類似于Unix中的硬鏈接);如果它是可變的,在對對象進(jìn)行操作時(shí),不需要再使用它來申請其它地方的內(nèi)存,只需要在這個(gè)對象之后連續(xù)(/-)地申請,即它的地址不變,但區(qū)域會(huì)變長或變短。
怎樣理解String的不變模式?
Java字符串。string類是不可變的。對string類的任何更改都將返回一個(gè)新的string類對象。字符串對象是系統(tǒng).Char用于表示字符串的對象的有序集合。string對象的值是有序集合的內(nèi)容,并且該值是不可變的。String是一個(gè)特殊的引用對象,它可以在不使用新對象的情況下生成。例如:stringa=“ABC”stringb=“ABC”stringc=newString(“ABC”)這里生成兩個(gè)對象?!癆BC”是一個(gè)對象,newString()是一個(gè)對象。a、 B和C都在堆棧區(qū)域中創(chuàng)建引用。A和B指向常量池中的“ABC”,newString的值也指向常量池中的ABC;*同一個(gè)字符串只創(chuàng)建一次。例如:stringa=“ABC”a=a“d”要執(zhí)行此操作,實(shí)際生成三個(gè)對象,一個(gè)是“ABC”,一個(gè)是“d”,一個(gè)是“ABCD”。只有當(dāng)拼接完成時(shí),“ABC”和“d”才會(huì)丟失它們的引用并成為垃圾對象。事實(shí)上,改變的不是“ABC”本身,而是對“ABCD”的引用;當(dāng)我對字符串本身進(jìn)行操作時(shí),我改變的是引用而不是對象本身。