类似python的is, 对于无论是mutable还是immutable的数据, 都compare by reference.
===
不行, 对于immutable数据会按bit比较.
就是我想要根据pointer_from_objref后的结果进行比较.
it = "123"
p1 = pointer_from_objref(z)
=> Ptr{Nothing} @0x00007f73c9d528b0
p2 = pointer_from_objref(it)
=> Ptr{Nothing} @0x00007f73c9d528b0
这种比较的预期行为就是根据@
后面的那个数字进行比较.
类似于这个样子吗?
julia> ≣(x, y) = UInt(pointer_from_objref(x)) == UInt(pointer_from_objref(y))
≣ (generic function with 1 method)
julia> a = "123"; b = "123";
julia> a === b
true
julia> a ≣ b
false
julia> a ≣ c
true
这应该是对的。你看这开销如何?python写多,看着invoke觉得贵。。
开销至少比Python快吧。233
julia> @btime $a ≣ $b
1.883 ns (0 allocations: 0 bytes)
true
但是考虑到我使用地址比较的目的就是为了性能,要是速度还没有bitwise eq快,我还搞啥自行车。。。
哦哦。。。如果可能,用 Symbol
应该比较比 String
快。或者用 GitHub - JuliaString/InternedStrings.jl: Fully transparent string interning functionality, with proper garbage collection 什么的。。。