当我阅读 Python Essential Reference 一书的第5章时,我在示例 ListTransaction 中遇到了一些问题。这是原始代码:
class ListTransaction(object):
def __init__(self,thelist):
self.thelist=thelist
def __enter__(self):
self.workingcopy=list(self.thelist)
return self.workingcopy
def __exit__(self,type,value,tb):
if type is None:
self.thelist[:]=self.workingcopy
return False
items=[1,2,3]
with ListTransaction(items) as working:
working.append(4)
working.append(5)
print(items) #[1,2,3,4,5]
它按预期工作。但如果我省略[:]
定义中的__exit__()
,即第9行变为
self.thelist=self.workingcopy
然后输出
[1,2,3].
那么列表之后是否存在 [:]
之间的区别是什么?