簡體   English   中英

Python中的遞歸“使不可變”功能

[英]Recursive 'Make Immutable' function in python

我有一個數據結構,它由任意嵌套的列表,整數和字符串組成。 例如:

[ "data", [ 1, "file", [], [1,2] ], 3 ]

我想使用這樣的對象對dict進行索引,但是我不能這樣做,因為python抱怨它們不是不可變的(這是事實)。 我很驚訝地發現似乎沒有通用的遞歸“使不可變”功能。 是否存在這樣的功能? 有充分的理由不這樣做嗎? 我應該如何解決這個問題?

要用作字典鍵是非常不尋常且笨拙的數據結構,這使我想知道這是否是XY問題

將觀察結果放在一邊……對於您指定的特定類型的結構,除了列表(可變的)和字符串和整數(不可變的)之外,什么都不包含,將所有列表轉換為元組的遞歸函數非常簡單:

def tuplify(value):
    if isinstance(value, list):
        return tuple(tuplify(x) for x in value)
    else:
        return value

...並按預期工作:

>>> tuplify(['data', [1, 'file', [], [1, 2]], 3])
('data', (1, 'file', (), (1, 2)), 3)

但是,沒有凍結任何可變對象的解決方案。 幾年前,有人提出並拒絕了Python的凍結協議 ,但是即使已被接受,您也必須依靠每個可變對象才能實現__freeze__()方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM