将对象传递给类时的奇怪行为

时间:2018-09-25 06:19:11

标签: python python-3.x

foo为何不会在myClass2中使用bool进行更新(示例1),但是如果我使用列表(示例2),它就可以工作。我想节省内存,解释器在传递列表时使用引用,但在使用布尔值,整数等时创建副本?我该如何通过提现?我试图避免使用全局。 (Python 3.7.0)

示例1

class myClass1():

    def __init__(self, foo):
        self.foo = foo

    def run(self):
        print(self.foo)
        self.foo = False

class myClass2():

    def __init__(self, foo):
        self.foo = foo

    def run(self):
        print(self.foo)


def main():

    foo = True

    c1 = myClass1(foo)
    c2 = myClass2(foo)

    c1.run()
    c2.run()

if __name__ == '__main__':
    main()

输出

True
True

示例2

class myClass1():

    def __init__(self, foo):
        self.foo = foo

    def run(self):
        print(self.foo[0])
        self.foo[0] = False

class myClass2():

    def __init__(self, foo):
        self.foo = foo

    def run(self):
        print(self.foo[0])


def main():

    foo = [True]

    c1 = myClass1(foo)
    c2 = myClass2(foo)

    c1.run()
    c2.run()

if __name__ == '__main__':
    main()

输出

True
False

0 个答案:

没有答案