防止在重构过程中意外更改复制/视图语义

2024-04-28 23:42:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个{}代表一块板,上面有一些碎片。片段由namedtuple表示,并存储在属性_pieces中,该属性只是一个字典(其键是电路板上的位置,其值是片段)

Board有一个方法get_rectangle,该方法应返回板上指定矩形中位置和块的副本。它只需创建并返回一个新的字典,并对其位置进行适当过滤即可

很久以后,在重构过程中,片段从namedtuple变为class并变得可变。这导致了一个困难的错误:从get_rectangle返回的字典不再是副本(它与电路板共享片段对象)

当然,在发现这个bug之后,很容易修复它。但是有什么技术可以避免这个问题呢?原来的设计有什么明显的问题吗


Tags: 方法boardget字典属性过程副本代表
1条回答
网友
1楼 · 发布于 2024-04-28 23:42:54

当您复制字典时,似乎是在复制对对象的引用,而不是对象本身。由于元组是不可变的,因此可以避免修改原始元组的任何问题。您是否考虑过使用deepcopy来避免此问题

相关问题 更多 >