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