Julia中执行b = a赋值后,修改a时b何时同步变化?
Julia中
b = a后修改a,b何时同步变化? 核心逻辑前提
b = a的本质是让变量b和a指向同一个对象,而非复制对象本身。后续b是否变化,取决于你对a的操作是「突变对象本身」还是「给a绑定新对象」。
场景1:b会随a修改而变化
当你对a指向的对象进行原地突变(即修改对象自身的内容,不改变a的指向)时,b会同步变化,因为两者指向同一个实例。
- 可变容器的原地修改(如数组、字典)
a = [1, 2, 3] b = a push!(a, 4) # 原地向数组添加元素 println(b) # 输出 [1, 2, 3, 4]
- 修改可变结构体的字段
mutable struct Person name::String end a = Person("Alice") b = a a.name = "Bob" # 原地修改结构体实例的字段 println(b.name) # 输出 "Bob"
- 数组索引赋值(原地修改元素)
a = [10, 20] b = a a[1] = 100 # 原地修改数组的第一个元素 println(b) # 输出 [100, 20]
场景2:b不会随a修改而变化
当你给a重新绑定新对象(即让a指向另一个完全不同的实例)时,b不会变化,因为它仍指向原来的对象。
- 给
a赋值新的不可变对象(如数值、字符串、元组)
a = 10 b = a a = 20 # 让a指向新的整数对象 println(b) # 输出 10
- 给
a赋值新的可变对象
a = [1, 2, 3] b = a a = [4, 5, 6] # 让a指向新创建的数组 println(b) # 输出 [1, 2, 3]
- 使用返回新对象的操作(非原地修改)
a = [3, 1, 2] b = a a = sort(a) # sort默认返回新数组,不修改原数组 println(b) # 输出 [3, 1, 2]
关键总结
- 原地突变对象(如带
!的函数、修改可变结构体字段)→b同步变化 - 重新赋值新对象(
a = ...、返回新对象的函数)→b保持不变
内容的提问来源于stack exchange,提问作者Rodolfo
相关产品推荐
相关产品推荐

