我知道python通过引用传递对象,但为什么下面的代码的第二个输出是10而不是10?
class a():
def __init__(self, value):
self.value = value
def test(b):
b = a(10)
b = a(3)
print(b.value)
test(b)
print(b.value)
答案 0 :(得分:2)
Python对象按值传递,其中值是引用。第b = a(3)
行创建了一个新对象,并在其上放置了标签b
。 b
不是对象,它只是恰好在对象上的标签。当您致电test(b)
时,您会复制标签b
并将其传递给该函数,使该函数的本地b
(它影响全局b
)也是一个标签。同一个对象。这两个b
标签之间没有任何关系 - 它们恰好发生在同一个对象上。因此,函数中的行b = a(10)
只是创建一个新对象,并将本地b
标签放在其上,使全局b
完全保留原样。
答案 1 :(得分:0)
您没有从函数返回值以放入类中。这意味着'b'是无关紧要的,什么都不做。唯一的连接是名称'b'
您需要重新分配值'b'才能调用该类。
class a():
def __init__(self, value):
self.value = value
def test(b):
b = a(10)
return b
b = a(3)
print(b.value)
b = test(3)
print(b.value)