Python传递参数和类方法

时间:2016-06-16 12:56:37

标签: python parameter-passing class-method

我在这里缺少一些理解,虽然我确定这是在某个地方的Python文档中,但我根本不知道在哪里看起来很精确。

我试图了解当我将一个参数传递给函数时实际发生了什么。

换句话说......我传递对象本身,我是否传递了对象的引用,或者我只是传递了值。

采用以下简单示例:

class Test:
    def __init__(self):
        self.val = 0

    def inc(self):
        self.val += 1

    def set(self, val):
        self.val = val

    def __str__(self):
        return str(self.val)

def sub(i,j,k):
    i.inc()
    j += 1
    k = [x+1 for x in k]
    print 'print1',i,j,k
    i.set(5)
    j = 5
    k = [5]*3
    print 'print2',i,j,k
    another(i,j,k)
    print 'print4',i,j,k

def another(l,m,n):
    l.inc()
    m += 1
    n[0] = n[0]+1
    print 'print3',l,m,n

def main():
    a = Test()
    b = 0
    c = [0]*3
    sub(a,b,c)

    print 'print5',a,b,c


if __name__ == "__main__":
    main()

输出非常简单......

print1 1 1 [1, 1, 1]
print2 5 5 [5, 5, 5]
print3 6 6 [6, 5, 5]
print4 6 5 [6, 5, 5]
print5 6 0 [0, 0, 0]

我只是想了解我曾经以某种方式穿越这里的细节。 我理解类方法直接修改对象,但这意味着我传递实际对象,而不仅仅是它的值/内容。然而,对于简单的整数,甚至是列表,这显然不是真的,但如果我修改了一个列表元素,那么......魔术???

0 个答案:

没有答案