diff options
author | Raymond Hettinger <python@rcn.com> | 2004-03-13 18:18:51 (GMT) |
---|---|---|
committer | Raymond Hettinger <python@rcn.com> | 2004-03-13 18:18:51 (GMT) |
commit | 3aa82c07f709a532de28a39308c23757d3b9c91b (patch) | |
tree | 9afcb4a3e014ee23daac39f38f45cb3b21811345 | |
parent | 42bec93e5c0fd114b2f4c3c498b35001d97a94c4 (diff) | |
download | cpython-3aa82c07f709a532de28a39308c23757d3b9c91b.zip cpython-3aa82c07f709a532de28a39308c23757d3b9c91b.tar.gz cpython-3aa82c07f709a532de28a39308c23757d3b9c91b.tar.bz2 |
SF bug #910986: copy.copy fails for array.array
Added support for the copy module.
-rwxr-xr-x | Lib/test/test_array.py | 7 | ||||
-rw-r--r-- | Misc/NEWS | 2 | ||||
-rw-r--r-- | Modules/arraymodule.c | 15 |
3 files changed, 24 insertions, 0 deletions
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]) @@ -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, |