2 1 7可變型別與不可變型別

2021-06-26 19:43:47 字數 2084 閱讀 5600

python有兩種內建的或是已經定義過的型別。

不可變型別不提供變更內容的方法。比如,變數x被置為6,它沒有增長的方法。如果你需要加1,你需要建立乙個新的物件。

my_list = [

1, 2,

3]my_list[0

] =

4print

my_list

# [4, 2, 3] <- the same list as changedx=

6x=x

+1 #thenewxisanotherobject 

這種區別的結果之一就是可變型別不是穩定的,因此它們不能作為字典的key。

對可變的物件使用可變型別,對不可變的物件使用不可變型別,有助於澄清**的意圖。

例如,不可變的列表對應的就是元組。建立乙個(1,2)的元組。元組建立以後就不能再更改,並且可以作為字典的鍵。

bad 

# create a concatenated string from 0 to 19 (e.g. "012..1819")

nums

= ""

for

n in

range(20

): nums

+= str(n

) # slow and inefficient

print

nums

good 

# create a concatenated string from 0 to 19 (e.g. "012..1819")

nums =

for

n in

range(20

): nums.(

str(n))

print "".

join

(nums

) # much more efficient

best 

# create a concatenated string from 0 to 19 (e.g. "012..1819")

nums = [

str(n)

for

n in

range(20

)] print "".

join

(nums) 

最後要說的一點就是string使用join()並不總是最好的。如果你從一系列已經定義好的字串中建立乙個新字串,使用加號事實上還是挺快的。但是在以上的那種情況或者你向乙個已經存在的字串新增字串,那麼使用jion()將是較好的方法。

foo 

= 』foo』

bar

= 』bar』

foobar

= foo

+ bar

# this is good

foo

+= 』ooo』

# this is bad, instead you should do:

foo

= 』』

.join

([foo

, 』ooo』])

注意:除了join方法你也可以用格式化字串來連線定義好的字串,但是在python3中%操作符將會被str.format()替代。

foo 

= 』foo』

bar

= 』bar』

foobar

= 』%s%s』 % (

foo,

bar)

# it is ok

foobar

= 』』

.format

(foo

, bar

) # it is better

foobar

= 』』

.format

(foo

=foo

, bar

=bar

) # it is best 

2.1.8 vendorizing dependencies

2.1.9 runners

2.1.10 further reading

• •  

可變型別與不可變型別

一 什麼可變資料型別和不可變資料型別 可變資料型別 value值改變,id值不變 不可變資料型別 value值改變,id值也隨之改變。二 如何確定一種資料型別是可變的還是不可變的 根據可變資料型別與不可變資料型別的概念,只需要在改變value值的同時,使用id 函式檢視變數id值是否變化就可以知道這...

可變型別與不可變型別

可變型別 值發生改變時,記憶體位址不變,證明在改變原值 不可變型別 值發生改變時,記憶體位址也發生改變,即id也變,證明是沒有在改變原值,是產生新的值 1.數字型別 x 10 id x 1830448896 x 20 id x 1830448928 記憶體位址改變了,說明整型是不可變資料型別,浮點型...

python可變型別與不可變型別

學習版本3.5.2 python的基礎型別數值 字串和元組都是不可變型別,列表和字典時可變型別 1.number 字串 id 1 4297546560 id 2 4297546592 a 1 id a 4297546560 a 2 id a 4297546592 b 1 id b 429754656...