Python中赋值后修改a不影响b的问题及解决方法
问题解析
Python里像整数这类不可变对象,变量本质是指向对象的引用。你执行b = a时,b只是复制了a当前指向的整数1的引用;之后a = 2是让a指向了新的整数对象2,但b仍然指着原来的1,所以两者不会同步变化。
实现同步修改的方法
要让a和b同步变化,得用可变对象来存值——可变对象本身可以被修改,变量始终指向同一个对象,修改对象内部的值时,所有指向它的变量都会看到变化。下面是几种实用写法:
方法1:用列表存值
列表是典型的可变对象,用它的元素来承载数值:
input1 = input() a = [None] b = a # 让b和a指向同一个列表 if input1 == "Bleeb": a[0] = 1 if a[0] == 1: a[0] = 2 print(a[0]) print(b[0])
输入Bleeb后,输出会是:
2 2
方法2:用字典存值
用字典的键值对封装数值,逻辑和列表类似:
input1 = input() a = {"val": None} b = a if input1 == "Bleeb": a["val"] = 1 if a["val"] == 1: a["val"] = 2 print(a["val"]) print(b["val"])
输入Bleeb后同样输出两个2。
方法3:自定义类封装
如果需要更清晰的语义,可以写个简单类来管理数值:
class ValueHolder: def __init__(self, val=None): self.val = val input1 = input() a = ValueHolder() b = a if input1 == "Bleeb": a.val = 1 if a.val == 1: a.val = 2 print(a.val) print(b.val)
这种方式适合后续需要扩展功能的场景。
内容的提问来源于stack exchange,提问作者Gabrielgreen2904
相关产品推荐
相关产品推荐

