pg.clone

Accessible via pg.clone, pg.symbolic.clone.

clone(x, deep=False, memo=None, override=None)[source]

Clones a value. Use symbolic clone if possible.

Example:

@pg.members([
  ('x', pg.typing.Int()),
  ('y', pg.typing.Any())
])
class A(pg.Object):
  pass

# B is not a symbolic object.
class B:
  pass

# Shallow copy on non-symbolic values (by reference).
a = A(1, B())
b = pg.clone(a)
assert pg.eq(a, b)
assert a.y is b.y

# Deepcopy on non-symbolic values.
c = pg.clone(a, deep=True)
assert pg.ne(a, c)
assert a.y is not c.y

# Copy with override
d = pg.clone(a, override={'x': 2})
assert d.x == 2
assert d.y is a.y
Return type:

Any

Parameters:
  • x – value to clone.

  • deep – If True, use deep clone, otherwise use shallow clone.

  • memo – Optional memo object for deep clone.

  • override – Value to override if value is symbolic.

Returns:

Cloned instance.