python 冷知識(裝13 指南)

2022-04-29 14:36:08 字數 1114 閱讀 9362

alpha = [1, 2, 3]

beta = alpha # alpha 的別名

beta += [4, 5] # alpha 和 beta 都是[1, 2, 3, 4, 5]

beta = beta + [6, 7] # 此時beta的記憶體位址已經變成了,[1, 2, 3, 4, 5, 6, 7]

print(alpha) # alpha 還是 [1, 2, 3, 4, 5]

會發生這樣的情況就是可變資料型別在+=的時候自身的記憶體位址不變,只是改變了這個位址裡的值。而beta + [6, 7]返回了他們相加後的記憶體位址,此時已經和beta沒有關係了。

話不多說,直接上**!

def func(msg, dic={}):  # 把{} 改成none ,因為{}在函式定義的時候就會生成,每次呼叫都是它

'''模擬實際開發中,嘗試從檔案中拿到字典,如果沒有就返回乙個空字典'''

import json

try:

return json.load(msg)

except:

return dic

foo = func('bad data')

foo['name'] = 'hahaha'

bar = func('also bad data')

bar['age'] = 18

print(foo)

print(bar)

''''''

這段**中,foobar接收到的是同乙個物件,因為空字典在函式定義的時候就已經預先存在與記憶體中了。相似的,如果在類中定義乙個可變資料型別,那麼類的所有子類都可以操作這個資料!

在我專案過程中,遇到這樣的乙個問題,我要往乙個列表裡存入另乙個列表作為其的乙個元素,但是忘記了拷貝的問題。

a = 

b = [1,3]

b += [6]

a # [1, 3, 6] 但是這不是我要的資料

Python的冷知識

之前看到乙個文章,講的是一些關於python的冷知識,有興趣的可以看一下喲 省略號也是物件 在python中,一切皆物件,也不例外。在python3中 叫做ellipsis。而在python2中沒有 這個語法。只能直接使用ellipsis來獲取 它轉為布林值時為真 那麼這個 到底有什麼用呢,據說它是...

Python 浮點數的冷知識

讀者們可以先思考下 若兩個元組相等,即 a b 且 a is b,那麼相同索引的元素 如 a 0 b 0 是否必然相等呢?若兩個物件的 hash 結果相等,即 hash a hash b 那麼它們是否必然相等呢?答案當然都為否 不然就不叫冷知識了 大家可以先嘗試回答一下,然後再往下看。思考分割線 好...

Python 浮點數的冷知識

本週的pycoder s weekly上分享了一篇小文章,它裡面提到的冷知識很有意思,我稍作補充,分享給大家。它提到的部分問題,讀者們可以先思考下 答案當然都為否 不然就不叫冷知識了 大家可以先嘗試回答一下,然後再往下看。思考分割線 好了,先來看看第乙個問題。兩個相同的元組 a b,它們有如下的關係...