關於 的乙個容易被忽略的問題

2022-07-26 09:12:12 字數 585 閱讀 3244

a = (0,1,2,3,[0,1,2],5)

a[4] += [3]

在一般來說,所有的使用者都知道元組一旦被建立就不可更改,除非用乙個新的元組來覆蓋它,但是上面的示例有了不同的反饋。

執行之後得到了異常:typeerror: 'tuple' object does not support item assignment

在這個時候檢視a的值會發現a被改動了:

>>> a

(0, 1, 2, 3, [1, 2, 3], 5)

而且在修改的前後,a的id並沒有發生變化。那麼這個增量賦值操作是怎麼被完成的??

在查閱了fluent python後得到了這個解釋,在修改時,s[a]的值被傳入棧的頂端,此時s[a]的修改可以被完成,因為頂端指向了可變的物件。隨後s[a] = top報錯,因為s是乙個不可變的元組。(檢視位元組碼)

但是在使用extend就可以避免報錯。a[4].extend([4])就可以順利完成操作。

此後得到了兩個經驗:

1.元組中不要存放可變的物件,以免以後發生預料不到的問題。

2.增量賦值並不是乙個原子操作,就如同上面的例子所說,改動完成了但是也丟擲了異常。

Bitmap使用容易被忽略的乙個小問題點

下面的 是存在問題的 matrix matrix new matrix matrix.setrotate 0.013558723994643297f log.d tag,isidentity matrix.isidentity bitmap bitmap bitmapfactory.decodere...

乙個最容易忽略的問題scanf的結束條件以及返回值

scanf的返回值是正確輸入的引數個數。scanf 函式接收輸入資料時,遇以下情況結束乙個資料的輸入 1 遇空格 回車 跳格 鍵 2 遇寬度結束 3 遇非法輸入。以下這段 int test 編譯後,輸入hello world!其結果是hello world!麼?如果回答是,那就大錯特錯了。字串中含有...

容易被忽略的羅大佑歌曲

剛才跟michael聊天,說起羅大佑,他說不熟。我說我肯定能找出10首歌,你知道,但你不知道是羅的歌。果然,我一說,他說 這也是他的 太牛x了 看來得給大家掃掃盲了,列幾首你可能很熟悉,但卻不一定知道是羅氏歌曲的歌 童年 沒聽過的童年的恐怕沒有,但不知道童年是羅大佑作品的還真的有。此歌最早由張艾嘉演...