From 53c6cbef40d7fa3039254afabb98f7e432b13537 Mon Sep 17 00:00:00 2001 From: Max Horn Date: Wed, 1 Oct 2025 15:14:50 +0200 Subject: [PATCH] Optimize copy(::Generic.MPoly) Before, `copy` did the same as `deepcopy`. Now we only copy the coefficient and exponent vectors. Before: julia> R,(x,y) = polynomial_ring(QQ, [:x, :y]); julia> f = y^2 + 1; julia> @b copy(y) 377.016 ns (17 allocs: 1.078 KiB) julia> @b copy(f) 561.188 ns (26 allocs: 1.656 KiB) After: julia> R,(x,y) = polynomial_ring(QQ, [:x, :y]); julia> f = y^2 + 1; julia> @b copy(y) 120.892 ns (5 allocs: 224 bytes) julia> @b copy(f) 117.348 ns (5 allocs: 256 bytes) --- src/generic/MPoly.jl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/generic/MPoly.jl b/src/generic/MPoly.jl index 29a5b337da..c7c63f3915 100644 --- a/src/generic/MPoly.jl +++ b/src/generic/MPoly.jl @@ -796,7 +796,7 @@ function Base.deepcopy_internal(a::MPoly{T}, dict::IdDict) where {T <: RingEleme return parent(a)(Rc, Re) end -Base.copy(f::Generic.MPoly) = deepcopy(f) +Base.copy(f::Generic.MPoly) = parent(f)(copy(f.coeffs), copy(f.exps)) ############################################################################### #