我是C人。我知道蟒蛇譴責的const贊成“我們是大人,我們相互信任”的文章。
現在我需要將一些訊息通知一些 python 執行緒并決定使用佇列。訊息是最長為 1024 個字符的字串。我覺得這些執行緒可以為呼叫執行緒甚至為它們自己更改這些訊息是荒謬的。
如何防止?或者已經是了?
uj5u.com熱心網友回復:
TLDR:將您的資料轉換為不可變型別之一,或創建凍結型別。數字和字串等原始資料始終是不可變的。
Python 提供了幾種構造不可變或準不可變值的方法。
- 像數字、字串和類似的原語總是不可變的。
- 容器提供了一些不可變的型別,例如
tuple或frozenset作為不可變的序列或集合。 - 自定義型別可以定義為不可變的,例如 using
NamedTuple或freezedataclass。
理想情況下,應該使用不可變型別直接構造要共享的資料。如果這是不可能的,請在共享之前將資料從可變型別轉換為不可變型別。
>>> # strings are always immutable
>>> data = "Hello World!"
>>> data[:5] = "Howdy"
....
TypeError: 'str' object does not support item assignment
>>> # sequence are mutable or immutable
>>> data = ["Hello", "World"]
>>> idata = tuple(data) # create immutable from mutable sequence
>>> data[0] = "Howdy"
>>> idata[0] = "Howdy"
...
TypeError: 'tuple' object does not support item assignment
>>> data, idata
(['Howdy', 'World'], ('Hello', 'World'))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/371831.html
