python类和变量范围

python类和变量范围,python,parameters,pass-by-reference,Python,Parameters,Pass By Reference,为什么不打印['a'、'b'、'c']?当你把一个列表传递给一个函数时,你实际上是在传递一个指向列表的指针,而不是列表的副本。因此,b在原始的args中添加了一个值,而不是它自己的本地副本 将列表传递给函数时,实际上是在传递指向列表的指针,而不是列表的副本。因此,b在原始的args中添加了一个值,而不是它自己的本地副本 传递给方法b和c的参数是对列表args的引用,而不是它的副本。在方法b中,您将附加到方法a中创建的相同列表中 有关Python中参数传递的更详细说明,请参见。传递给方法b和c的参

为什么不打印['a'、'b'、'c']?

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

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

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


有关Python中参数传递的更详细说明,请参见。

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


有关Python中参数传递的更详细说明,请参见。

BTW,这与Python类或变量范围无关。它是按值传递和按引用传递。Python将后者用于对象。我希望我能接受这两种答案。我很感谢mizo提供的链接,但我将Wern标记为答案,原因有两个:a)他先发布了b)他现在才成为会员11天。顺便说一句,这与Python类或变量范围无关。它是按值传递和按引用传递。Python将后者用于对象。我希望我能接受这两种答案。我很感激mizo提供的链接,但我将Wern作为答案,原因有两个:a)他先发布了b)他现在才成为会员11天。
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()