python对象作为函数的参数

时间:2017-12-09 01:47:16

标签: python

我知道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)

2 个答案:

答案 0 :(得分:2)

Python对象按值传递,其中值是引用。第b = a(3)行创建了一个新对象,并在其上放置了标签bb不是对象,它只是恰好在对象上的标签。当您致电test(b)时,您会复制标签b并将其传递给该函数,使该函数的本地b(它影响全局b)也是一个标签。同一个对象。这两个b标签之间没有任何关系 - 它们恰好发生在同一个对象上。因此,函数中的行b = a(10)只是创建一个新对象,并将本地b标签放在其上,使全局b完全保留原样。

答案 1 :(得分:0)

  1. 您没有从函数返回值以放入类中。这意味着'b'是无关紧要的,什么都不做。唯一的连接是名称'b'

  2. 您需要重新分配值'b'才能调用该类。

  3. 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)