【问题标题】:python classes and variable scopepython类和变量范围
【发布时间】:2011-08-24 14:08:51
【问题描述】:
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']?

【问题讨论】:

  • 顺便说一句,这与 Python 类或变量范围无关。这是按值传递与按引用传递。 Python 将后者用于对象。
  • 我希望我能同时接受这两个答案。我很欣赏 mizo 提供的链接,但我将 Wern 标记为答案有两个原因:a)他先发帖 b)他现在才 11 天成为会员。

标签: python parameters pass-by-reference


【解决方案1】:

您传递给方法bc 的参数是对列表args 的引用,而不是它的副本。在方法 b 中,您附加到在方法 a 中创建的相同列表。

有关 Python 中参数传递的更详细说明,请参阅this answer

【讨论】:

    【解决方案2】:

    当您将列表传递给函数时,您实际上是在传递一个指向列表的指针,而不是列表的副本。所以b 将一个值附加到原始args,而不是它自己的本地副本。

    【讨论】:

      猜你喜欢
      • 2017-12-08
      • 2014-04-18
      • 2015-10-13
      • 1970-01-01
      • 2022-01-11
      相关资源
      最近更新 更多