summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2004-03-13 18:18:51 (GMT)
committerRaymond Hettinger <python@rcn.com>2004-03-13 18:18:51 (GMT)
commit3aa82c07f709a532de28a39308c23757d3b9c91b (patch)
tree9afcb4a3e014ee23daac39f38f45cb3b21811345
parent42bec93e5c0fd114b2f4c3c498b35001d97a94c4 (diff)
downloadcpython-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-xLib/test/test_array.py7
-rw-r--r--Misc/NEWS2
-rw-r--r--Modules/arraymodule.c15
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])
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,