【发布时间】:2013-03-01 21:13:51
【问题描述】:
我正在尝试让我的小脚本正常工作,但我不知道问题出在哪里。
其中一种方法会修改我的测试dictvar,即使我不返回它。我的意思是,我想在本地使用它而不是返回值。这不是我的实际代码,但您可以确定它具有代表性。
>>> class check:
... def pathgen(self,test):
... test['a']=0
... print test
... def assign(self):
... test={'a':1}
... self.pathgen(test)
... print test #WILL PRINT 0
...
>>> a=check()
>>> a.assign()
{'a': 0}
{'a': 0}
【问题讨论】:
-
没错。传递的字典对象是 mutated - 这是因为 Python 是 Call By (Object) Sharing。添加另一个键
'hello': 'world!'并且不要在pathgen中更改它。结果如何?如果您想修改pathgen中的字典,请创建一个 new 字典对象,它是原始字典的 副本 并使用它。 -
@pst 我以前没听说过“通过共享调用”这个词,很有趣。
-
将相同的打印两次。那我就不能在我的项目中使用 dict 了!
-
另一个术语是call by assignment。
-
@wRAR 我更喜欢使用它来避免与“按引用传递”/“按值传递[引用]”的歧义,这可以理解为完全不同的事物(或相同的事物)事物)跨越不同的语言。这只是一件不太容易处理的事情,它也适合用于描述 JavaScript 等不使用“引用”来讨论调用约定或实现规范的语言中的相同行为。谈论一种语言的工作原理是一回事,谈论它的实际实现方式是另一回事。
标签: python class dictionary