python类和变量范围

时间:2011-05-13 01:35:21

标签: python parameters pass-by-reference

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']?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

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