探索 Python 库:不可变变量

发布日期:2026-07-19 08:50:03  来源 : 杭州电子商务研究院    浏览量 :0
杭州电子商务研究院 发布日期:2026-07-19 08:50:03  
0

介绍

在操作数据时,防止数据突变非常重要,因为数据突变可能会导致数据和数据流经的系统变得比必要的更复杂。在本指南中,您将了解 Python Immutables 库,以及如何使用此库提供的数据结构,通过大量单独和批量操作高效且不可变地操作数据。这个库将帮助您简单地推理数据。让我们开始吧!

开始使用不可变变量

Python Immutables 库在 Hash Array Mapped Trie 数据结构之上提供了不可变的 API。Hash Array Mapped Trie(简称 HAMT)本质上是一个关联数组,它同时使用哈希表和 trie 数据结构的元素。

那么为什么要使用 HAMT?使用这种数据结构的主要原因是,与处理大量数据时类似的数据结构相比,它的内存效率极高。HAMT 通过牺牲其键的查找时间来实现这一点。在最坏的情况下,HAMT 的访问时间为 O(log n )(将其与哈希表的 O(1) 访问时间进行比较)。但这还不是全部!这个库不仅实现了 HAMT,而且还在其基础上提供了一个不可变且内存高效的 API。

在以下部分中,您将发现该库在其 HAMT 实现之上公开的 API。

安装

Immutables 库需要 Python 3.5 或更高版本,可以使用pipconda下载。

使用pip安装

      pip install immutables
    

使用conda安装

      conda install -c anaconda immutables
    

下载库后,您可以导入它并开始使用提供的Map类型,如下所示:

      import immutables

    my_map = immutables.Map(key1='a', key2='b', key3='c')

    my_second_map = immutables.Map({'a': 10, 'b': 20}, c=30)
    

个别操作

Immutables 库提供的Map类型提供许多单独的操作。这些操作包括: - get() - set() - delete()

get操作允许你通过唯一键从Map中获取单个值。示例如下:

      my_map.get('key1')

    # Will fetch the value 'a' from my_map
    

get方法还允许您指定回退,以防您提供的键在Map中不存在。如下所示:

      my_map.get('bogus_key', 5)

    # Will fetch the value 5 from my_map
    

Map类型提供的下一个单独操作set方法。set方法接受一个键和一个值,并向Map添加一个条目。此方法的用法如下:

      my_map.set('my_key', 1)
    

最后,delete方法接收一个键并删除Map中相应的条目。此方法的用法如下:

      keys_to_remove = list('key1', 'key2')

    for key in keys_to_remove:
        my_map.delete(key)
    

关于设置删除操作的一个关键部分是它们的不变性。这些方法中的每一个都返回一个新的Map,而前一个 Map 保持不变。以下是一个例子:

      my_map = immutables.Map(key1='a', key2='b', key3='c')

    my_new_map = my_map.delete('key1')

    print(my_map.get('key1'))
    # prints 'a'

    print(my_new_map.get('key1', 'fallback'))
    # prints 'fallback'
    

批量操作

单个操作很棒,也很有用。但是,如果你想要按顺序应用多个变更,而不必在每次操作后创建一个全新的Map ,该怎么办?输入mutatefinishmutatefinish方法允许你对Map应用批量更新或更改。此 API 的工作原理如下:

      my_map = immutables.Map(key1='a', key2='b', key3='c')
    
    map_mutation_context = my_map.mutate()
    map_mutation_context['new_key'] = 1
    map_mutation_context.set('key1', 'b')
    map_mutation_context.delete('key2')

    my_new_altered_map = map_mutation_context.finish()

    # The above code can also be written as:

    with my_map.mutate() as map_mutation_context:
        map_mutation_context['new_key'] = 1
        map_mutation_context.set('key1', 'b')
        map_mutation_context.delete('key2')
        my_new_altered_map = map_mutation_context.finish()
    

结论

在本指南中,您深入了解了 Python Immutables 库。现在您应该已经掌握了如何使用此库提供的高效哈希数组映射 Trie 数据结构。您可以实例化提供的Map类型以及此不可变类型提供的单个和批量操作。

此库将帮助您以惯用且安全的方式推理 Python 程序中的数据。如需更多信息,您可以随时查看库文档

以上内容来自杭州电子商务研究院推送
分享到:

长按或扫码识别 分享给好友

长按或扫码识别 分享给好友
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据