Skip to content

Commit f45f307

Browse files
committed
Add copy method to list object
1 parent 2d22a88 commit f45f307

2 files changed

Lines changed: 15 additions & 0 deletions

File tree

tests/snippets/set.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -83,3 +83,10 @@ def __hash__(self):
8383
else:
8484
assert False, "TypeError was not raised"
8585

86+
a = set([1,2,3])
87+
b = a.copy()
88+
assert len(a) == 3
89+
assert len(b) == 3
90+
b.clear()
91+
assert len(a) == 3
92+
assert len(b) == 0

vm/src/obj/objset.rs

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,13 @@ fn set_len(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
152152
Ok(vm.context().new_int(elements.len()))
153153
}
154154

155+
fn set_copy(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
156+
trace!("set.copy called with: {:?}", args);
157+
arg_check!(vm, args, required = [(s, Some(vm.ctx.set_type()))]);
158+
let elements = get_elements(s);
159+
Ok(PyObject::new(PyObjectPayload::Set { elements }, vm.ctx.set_type()))
160+
}
161+
155162
fn set_repr(vm: &mut VirtualMachine, args: PyFuncArgs) -> PyResult {
156163
arg_check!(vm, args, required = [(o, Some(vm.ctx.set_type()))]);
157164

@@ -450,6 +457,7 @@ pub fn init(context: &PyContext) {
450457
context.set_attr(&set_type, "add", context.new_rustfunc(set_add));
451458
context.set_attr(&set_type, "remove", context.new_rustfunc(set_remove));
452459
context.set_attr(&set_type, "clear", context.new_rustfunc(set_clear));
460+
context.set_attr(&set_type, "copy", context.new_rustfunc(set_copy));
453461

454462
let frozenset_type = &context.frozenset_type;
455463

0 commit comments

Comments
 (0)