Python immutable function parameter
本问题已经有最佳答案,请猛点这里访问。
我试图理解python的核心思想,我遇到了一篇很好的文章,它解释了如何将参数引用传递给对象。例如;
1 2 | def add_to_list(list_to_add, value): list_to_add.append(value) |
将原始列表更改为添加参数;
1 2 | def change_list(list_to_add): list_to_add = [1, 2, 3, 5] |
什么都不会做。
我目前正在编写一个基本的链表打印功能,它很简单;
1 2 3 4 5 6 7 8 9 10 11 12 | class Node: def __init__(self, val, next=None): self.val = val self.next = next root = Node(2, Node(3, Node(4, Node(5, Node(6))))) def print_list(root): while root: print root.val, root = root.next print '' |
你猜对了。它没有改变根的值。现在我的问题是这是怎么发生的。是因为python类是不可变的吗?
Python的类是不是一定不变的。你可以把你喜欢的漂亮的大的变化(与一些案件涉及的任何类型的扩展角或槽)。
然而,你是你的定义在模块级(全局)的可变参数的根,根,然后在打印_名称列表。
_ invoking打印表(根),然后到根assigning什么将不改变模块的整体水平。
如果你想说你不想说,但这是不同的讨论关于避免全局变量),你要把根D是在全球_列表打印
1 2 3 | def print_list(): global root ... |
然后你需要的参数。
一:不要这样!!!!!!!!!!!!!!!
如果你会使用工具来检查你的代码像Pylint warned,它应该有一个你的参数名称是"根"的阴影模块全局名称的"根"。
它是简单的:
1 | obj.do_something() |
在对象的操作中,可能影响它(例如,在
1 | obj = something_other |
《老discards参考对象和使用不同的一个。
在一个变化的对象将是可见的(当然)到用户的"其他"的对象,而只影响的重新分配的地方,它是redefined。