summaryrefslogtreecommitdiffstats
path: root/Objects/listobject.c
diff options
context:
space:
mode:
Diffstat (limited to 'Objects/listobject.c')
-rw-r--r--Objects/listobject.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/Objects/listobject.c b/Objects/listobject.c
index 2e2b9a2..5811f40 100644
--- a/Objects/listobject.c
+++ b/Objects/listobject.c
@@ -357,8 +357,17 @@ list_ass_slice(a, ilow, ihigh, v)
#define b ((listobject *)v)
if (v == NULL)
n = 0;
- else if (is_listobject(v))
+ else if (is_listobject(v)) {
n = b->ob_size;
+ if (a == b) {
+ /* Special case "a[i:j] = a" -- copy b first */
+ int ret;
+ v = list_slice(b, 0, n);
+ ret = list_ass_slice(a, ilow, ihigh, v);
+ DECREF(v);
+ return ret;
+ }
+ }
else {
err_badarg();
return -1;