Skip to content

Commit 3c83161

Browse files
ngoldbaumcharris
authored andcommitted
BUG: fix deepcopying StringDType arrays (#28643)
Fixes #28609
1 parent bac7b36 commit 3c83161

2 files changed

Lines changed: 16 additions & 8 deletions

File tree

numpy/_core/src/multiarray/methods.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1605,7 +1605,7 @@ _deepcopy_call(char *iptr, char *optr, PyArray_Descr *dtype,
16051605
}
16061606
}
16071607
}
1608-
else {
1608+
else if (PyDataType_ISOBJECT(dtype)) {
16091609
PyObject *itemp, *otemp;
16101610
PyObject *res;
16111611
memcpy(&itemp, iptr, sizeof(itemp));

numpy/_core/tests/test_stringdtype.py

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
import concurrent.futures
2+
import copy
23
import itertools
34
import os
4-
import pickle
55
import string
6+
import pickle
67
import sys
78
import tempfile
89

@@ -405,6 +406,13 @@ def test_pickle(dtype, string_list):
405406
os.remove(f.name)
406407

407408

409+
def test_stdlib_copy(dtype, string_list):
410+
arr = np.array(string_list, dtype=dtype)
411+
412+
assert_array_equal(copy.copy(arr), arr)
413+
assert_array_equal(copy.deepcopy(arr), arr)
414+
415+
408416
@pytest.mark.parametrize(
409417
"strings",
410418
[
@@ -1728,12 +1736,12 @@ def test_zeros(self):
17281736
assert_array_equal(z, "")
17291737

17301738
def test_copy(self):
1731-
c = self.a.copy()
1732-
assert_array_equal(self.get_flags(c), self.get_flags(self.a))
1733-
assert_array_equal(c, self.a)
1734-
offsets = self.get_view(c)['offset']
1735-
assert offsets[2] == 1
1736-
assert offsets[3] == 1 + len(self.s_medium) + self.sizeofstr // 2
1739+
for c in [self.a.copy(), copy.copy(self.a), copy.deepcopy(self.a)]:
1740+
assert_array_equal(self.get_flags(c), self.get_flags(self.a))
1741+
assert_array_equal(c, self.a)
1742+
offsets = self.get_view(c)['offset']
1743+
assert offsets[2] == 1
1744+
assert offsets[3] == 1 + len(self.s_medium) + self.sizeofstr // 2
17371745

17381746
def test_arena_use_with_setting(self):
17391747
c = np.zeros_like(self.a)

0 commit comments

Comments
 (0)