Julia 我怎么能不改变矩阵
在Julia中,如果Julia 我怎么能不改变矩阵,julia,Julia,在Julia中,如果t是某个矩阵 t = [1 2; 3 4] t1 = t t1[1,1] = 0 t2 = t 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 Ma
t
是某个矩阵
t = [1 2; 3 4]
t1 = t
t1[1,1] = 0
t2 = t
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)
变量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)