爲了可讀性,我想有一個行爲完全像一個字典(但帶有一個有意義的類型,而不是更一般的字典式)的自定義類:自定義類是一個字典,但初始化沒有字典拷貝?
class Derivatives(dict):
"Dictionary that represents the derivatives."
現在,有建築的一種方式這個類的新對象的方式不涉及副本?其實天真使用
derivs = Derivatives({var: 1}) # var is a Python object
創建複製作爲參數,這是我想避免的,爲了提高效率,通過字典。
我試圖繞過副本,但隨後類字典內無法改變,在CPython的:
class Derivatives(dict):
def __new__(cls, init_dict):
init_dict.__class__ = cls # Fails with __class__ assignment: only for heap types
return init_dict
我想有兩個給一個明確的類名字典的能力的程序操縱和構建這種字典的有效方式(而不是被迫複製Python字典)。這在Python中可以有效地實現嗎? PS:用例可能是100,000個單鍵密鑰Derivatives
,其中密鑰是一個變量(不是字符串,所以沒有關鍵字初始化)。這實際上並不慢,所以這裏的「效率原因」意味着更多像「優雅」這樣的東西:當不需要副本時,理想情況下不需要浪費時間做副本。因此,在這個特殊情況下,問題更多的是Python可以帶來的優雅/清晰度,而不是運行速度。
爲什麼不只是'derivs = Derivatives(x = 1)'?香草詞典('dict({'x':1})'')會出現同樣的複製行爲,但您不清楚爲什麼您會這麼做。 – jonrsharpe
好點,但我不能,因爲這些鍵實際上是Python對象。我會更新這個例子。 – EOL
然後不,沒有辦法提供你自己的文字。如果你不需要它*是一個字典,你可以讓它包含*一個字典,並通過'__getitem__'等公開它 – jonrsharpe