在 Julia 中,如果t是某个矩阵
t = [1 2; 3 4]
t1 = t
t1[1,1] = 0
t2 = t
Run Code Online (Sandbox Code Playgroud)
t2给出与 相同的输出t1。
我怎样才能做到t2平等t?
它们实际上都是平等的:
julia> t = [1 2; 3 4]
2×2 Matrix{Int64}:
1 2
3 4
julia> t1 = t
2×2 Matrix{Int64}:
1 2
3 4
julia> t1[1,1] = 0
0
julia> t2 = t
2×2 Matrix{Int64}:
0 2
3 4
julia> t == t1 == t2
true
julia> t === t1 === t2
true
julia> pointer(t), pointer(t1), pointer(t2) # identical
(Ptr{Int64} @0x00007fd213d37000, Ptr{Int64} @0x00007fd213d37000, Ptr{Int64} @0x00007fd213d37000)
Run Code Online (Sandbox Code Playgroud)
变量t、t1和t2指向相同的数据,相同的内存位置。所以当你变异时,t1你就变异了所有。
如果您希望它们不同,例如只修改一个,则必须使用copy:
julia> t = [1 2; 3 4];
julia> t1 = copy(t);
julia> t1[1,1] = 0;
julia> t2 = copy(t); # or just t if you want to avoid the copy
julia> t == t1 == t2
false
julia> pointer(t), pointer(t1), pointer(t2)
(Ptr{Int64} @0x00007fd21220e900, Ptr{Int64} @0x00007fd2142f9630, Ptr{Int64} @0x00007fd2142f9a90)
Run Code Online (Sandbox Code Playgroud)