我有一个{namedtuple
表示,并存储在属性_pieces
中,该属性只是一个字典(其键是电路板上的位置,其值是片段)
Board
有一个方法get_rectangle
,该方法应返回板上指定矩形中位置和块的副本。它只需创建并返回一个新的字典,并对其位置进行适当过滤即可
很久以后,在重构过程中,片段从namedtuple
变为class
并变得可变。这导致了一个困难的错误:从get_rectangle
返回的字典不再是副本(它与电路板共享片段对象)
当然,在发现这个bug之后,很容易修复它。但是有什么技术可以避免这个问题呢?原来的设计有什么明显的问题吗
当您复制字典时,似乎是在复制对对象的引用,而不是对象本身。由于元组是不可变的,因此可以避免修改原始元组的任何问题。您是否考虑过使用deepcopy来避免此问题
相关问题 更多 >
编程相关推荐