2011-05-13 76 views
0
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']?蟒类和可变范围

+0

顺便说一句,这与Python类或变量范围无关。它是通过价值与传递参考。 Python使用后者作为对象。 – Malvolio 2011-05-13 01:56:05

+0

我希望我能接受这两个答案。我很欣赏mizo提供的链接,但我将Wern标记为答案的原因有两个:a)他首先发布b)他现在只有11天的成员。 – Russell 2011-05-13 12:43:01

回答

2

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

1

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

请参阅this answer以获取有关Python中参数传递的更详细说明。