From 3aa82c07f709a532de28a39308c23757d3b9c91b Mon Sep 17 00:00:00 2001 From: Raymond Hettinger Date: Sat, 13 Mar 2004 18:18:51 +0000 Subject: SF bug #910986: copy.copy fails for array.array Added support for the copy module. --- Lib/test/test_array.py | 7 +++++++ Misc/NEWS | 2 ++ Modules/arraymodule.c | 15 +++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index 0331280..c9b05c2 100755 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -73,6 +73,13 @@ class BaseTest(unittest.TestCase): b.byteswap() self.assertEqual(a, b) + def test_copy(self): + import copy + a = array.array(self.typecode, self.example) + b = copy.copy(a) + self.assertNotEqual(id(a), id(b)) + self.assertEqual(a, b) + def test_insert(self): a = array.array(self.typecode, self.example) a.insert(0, self.example[0]) diff --git a/Misc/NEWS b/Misc/NEWS index 9c5d80a..350bf7e 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -180,6 +180,8 @@ Core and builtins Extension modules ----------------- +- array objects now support the copy module + - cStringIO.writelines() now accepts any iterable argument and writes the lines one at a time rather than joining them and writing once. Made a parallel change to StringIO.writelines(). Saves memory and diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c index 9382927..bda5fef 100644 --- a/Modules/arraymodule.c +++ b/Modules/arraymodule.c @@ -617,6 +617,17 @@ array_slice(arrayobject *a, int ilow, int ihigh) } static PyObject * +array_copy(arrayobject *a, PyObject *unused) +{ + return array_slice(a, 0, a->ob_size); +} + +PyDoc_STRVAR(copy_doc, +"copy(array)\n\ +\n\ + Return a copy of the array."); + +static PyObject * array_concat(arrayobject *a, PyObject *bb) { int size; @@ -1409,8 +1420,12 @@ PyMethodDef array_methods[] = { buffer_info_doc}, {"byteswap", (PyCFunction)array_byteswap, METH_NOARGS, byteswap_doc}, + {"__copy__", (PyCFunction)array_copy, METH_NOARGS, + copy_doc}, {"count", (PyCFunction)array_count, METH_O, count_doc}, + {"__deepcopy__",(PyCFunction)array_copy, METH_NOARGS, + copy_doc}, {"extend", (PyCFunction)array_extend, METH_O, extend_doc}, {"fromfile", (PyCFunction)array_fromfile, METH_VARARGS, -- cgit v0.12