有什么问题,请说明清楚。
数字是不可变类型,计算或者重新赋值后内存地址会变化,所以b+=3实际是生成一个值为0+3的数字后,将b指向这数字的内存地址,所以并不会改变a指向内存地址的值。
要实现你这种同时改变的效果你需要改python编译器了。。要么给a重新赋值指向b所指向的内存地址。
a=0
b=a
print('a',id(a))#内存地址一样
print('b',id(b))#内存地址一样
b+=3
print('a',id(a))#内存地址不变
print('b',id(b))#内存地址变化
或者题主看过python廖雪峰教程就很明白了,数字和字符串一样属于不可变类型。
你把程序顺序调整就可以了,b+=后面是任何一数,经过将b值赋给a后,a值都会变为该数:
b=0
b+=3
a=b
print(a)
#使用函数:
def mx(m,b=0):
b+=m
a=b
return a
print(mx(3))
print(mx(4))
这道题目考的是对复合赋值算术运算符的重载
你题目的解答代码如下:(如有帮助,望采纳!谢谢! 点击我这个回答右上方的【采纳】按钮)
class A:
def __init__(self, value):
self.value = value
def __str__(self):
return str(self.value)
def __iadd__(self,rhs):
self.value += rhs
a=A(0)
b=a
b+=3
print(a)
问a为什么不变是吗?a为什么要变呢
代码拆解为,
a=0
b=a # 此时 a复制一份给b
# 相当于 有两个变量 a=0 ,b=0
b+=3
# 此时的b=0+3
b=3
print(a) #输出结果为 0 a没有变化
你说的是这个吗? 变相的实现静态变量
class Foo(object):
count = 0
a = Foo()
b = a
b.count+=4
print(a.count)