Julia 为什么不可变类型通过复制传递?

Julia 为什么不可变类型通过复制传递?,julia,Julia,在关于的文档中,它说: 具有不可变类型的对象通过复制传递(在赋值语句和函数调用中),而可变类型通过引用传递 当对象无法更改时,复制整个对象的目的是什么?为什么不直接复制参考资料呢 还有,当我试着用 struct Foo bar::Int end x = Foo(10) y = x pointer_from_objref(x) # Ptr{Void} @0x00000001141ea760 pointer_from_objref(y) # Ptr{Void} @0x000000011

在关于的文档中,它说:

具有不可变类型的对象通过复制传递(在赋值语句和函数调用中),而可变类型通过引用传递

当对象无法更改时,复制整个对象的目的是什么?为什么不直接复制参考资料呢

还有,当我试着用

struct Foo
    bar::Int
end

x = Foo(10)
y = x

pointer_from_objref(x) # Ptr{Void} @0x00000001141ea760

pointer_from_objref(y) # Ptr{Void} @0x00000001141ea760
这表明对象是相同的。我误解了吗


谢谢你的帮助

来自_objref的指针_在不可变类型上无法正常工作。结果取决于调用它的上下文

试试像这样的东西

function test(x) return pointer_from_objref(x) end
println(test(x))
println(test(y))
考虑到它试图给不可变参数带来错误,我实际上对它的工作原理感到非常惊讶


对于非常小的不可变项,复制(或仅将值保留在寄存器中)实际上比绕过指针(指针与int大小相同,显然也需要复制到函数调用)便宜得多。

在较新的版本中,该文档似乎有,说不可变对象可以自由复制,而不是说它们总是被复制的。(我不是朱莉娅专家,但旧版本听起来很可疑。)啊!应该是最新版本的。因此,“maybe”表示编译器可能会通过复制对象进行优化,而0.6.1版本有输入错误。