Usually Curve operators calls `ED_curve_editnurb_load` and `ED_curve_editnurb_make` which creates another `cu->nurb` and free the old one.
But the old `cu->nurb` may be being referenced by a `PyObject` (type `pyrna_prop_collection_Type` with pointer inited in `rna_Curve_splines_begin`).
This can lead to crash or other nasty problems since `RNA_POINTER_INVALIDATE(nu_ptr)` is not called.
The idea of this patch is not to free the `cu->nurb` and `editnurb->nurbs` pointers.
**How this patch solves the problem:**
Although not used, the `BKE_nurbList_duplicate` logic is duplicated in `ED_curve_editnurb_load` and `ED_curve_editnurb_make` (with minor differences).
Basically these functions copy the ListBase of nurbs.
But to copy, the old nurb is always freed and a new one is allocated.
This patch changes the behavior of `BKE_nurbList_duplicate` to reuse pointers, and deduplicates the code in` ED_curve_editnurb_load` and `ED_curve_editnurb_make` by using that BKE function.
Ref T74888