python 类和变量范围
class Test:
def c(self, args):
print args
def b(self, args):
args.append('d')
def a(self):
args = ['a', 'b', 'c']
self.b(args)
self.c(args)
Test().a()
为什么不打印 ['a', 'b', 'c']?
class Test:
def c(self, args):
print args
def b(self, args):
args.append('d')
def a(self):
args = ['a', 'b', 'c']
self.b(args)
self.c(args)
Test().a()
Why doesn't this print ['a', 'b', 'c']?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
当您将列表传递给函数时,您实际上是在向其传递一个指向该列表的指针,而不是该列表的副本。因此,
b
正在将一个值附加到原始args
,而不是它自己的本地副本。When you pass a list to a function, you're really passing it a pointer to the list and not a copy of the list. So
b
is appending a value to the originalargs
, not its own local copy of it.您传递给方法
b
和c
的参数是对列表args
的引用,而不是它的副本。在方法b
中,您将附加到在方法a
中创建的同一列表。请参阅此答案了解更多信息Python中参数传递的详细解释。
The parameter you pass to methods
b
andc
is a reference to the listargs
, not a copy of it. In methodb
, you append to the same list you created in methoda
.See this answer for a more detailed explanation on parameter passing in Python.