考虑以下最小示例:
class MyClass():
def __init__(self, length):
self._list = [[] for _ in range(length)]
def __setitem__(self, key, value):
self._list[key] = value.copy()
def __getitem__(self, key):
return self._list[key]
现在,Python 文档说:
Python 中的赋值语句不复制对象,它们在目标和对象之间创建绑定。
应用上面的类意味着:
>>> l = [[1,2,3,4], [3,2,1,0]]
>>> C = MyClass(2)
>>> C[0] = l[0]
这确实是一个赋值语句。但是这些值现在是副本:
>>> C[0] == l[0]
True
>>> C[0] is l[0]
False
对于 Python 中的类,这是可接受的行为吗?
繁星点点滴滴
相关分类