关于#python#的问题,请各位专家解答!

img



有什么问题,请说明清楚。

数字是不可变类型,计算或者重新赋值后内存地址会变化,所以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))#内存地址变化

img

题主可以看这篇文章: python中不可变数据类型和可变数据类型 - 自由早晚乱余生 - 博客园 在学习python过程中我们一定会遇到不可变数据类型和可变数据类型。 1.名词解释 以下所有的内容都是基于内存地址来说的。 不可变数据类型: 当该数据类型的对应变量的值发生了改变,那么它对应的内存地址 https://www.cnblogs.com/operationhome/p/9642460.html

或者题主看过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)