[英]different behavior of strings and numbers in python when dealing with class and object variables
我发现了一个问题,但无法理解差异的原因:
代码1:
class Test:
var=2
def __init__(self):
self.var=self.var+1
p=Test()
print "p.var:",p.var
q=Test()
print "q.var:",q.var
输出1:
p.var:3
q.var:3
为什么不是输出(根据用于解释代码2的概念)
p.var:3
q.var:4
代码2:
class Test:
var=[]
def __init__(self):
self.var.append("fool")
p=Test()
print "p.var:",p.var
q=Test()
print "q.var:",q.var
输出2:
p.var: ['fool']
q.var: ['fool', 'fool']
我在Stack Exchange中阅读了有关code2的文章: python类实例变量和类变量
但无法将code1与以下概念链接。请帮助
此处的区别在于列表是可变对象; 整数是不可变的。 当code1递增self.var时,它必须返回一个新对象3。在第二个调用中,我们从2重新开始,为对象q生成另一个3。
在code2中, var仍然是一个类对象(该类仅一个,每个对象一个)。 当创建p时 ,我们将“ fool”附加到空列表中。 稍后创建q时,我们附加了第二个“傻瓜”。 同时打印它们:
p=Test2()
print "p.var1:",p.var
q=Test2()
print "q.var2:",q.var
print "p.var2:",p.var
输出:
p.var1: ['fool']
q.var2: ['fool', 'fool']
p.var2: ['fool', 'fool']
这样可以澄清事情吗?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.