SIGN IN SIGN UP

Make sync() populate objects with same .id with the same set of fields

* Currently sync() will track objects by their Python address, so if we
  have `alice1` with just `name` property, and we have `alice2` with the
  same `id` but only `email` property, after sync() they would only have
  their `.name` and `.email` properties updated respectively.

  We are changing sync() to populate them with the same data, so after
  sync() they would both have `.name` and `.email` attributes and their
  `.__dict__` would be equal.

  We do this because of computed backlinks (although I think we can find
  more motivation for this if we think hard). If `alice1` and `alice2`
  have the same `.id` and `alice1` was added to the `UserGroup.users` multi
  link, we want *both* `alice1.groups` and `alice2.groups` computeds to
  point back to the new user group they are member of. We also want to
  make it irrelevant if it was `alice1` or `alice2` added to
  `UserGroup.users` -- after sync() it shouldn't matter as they will
  both reflect the same data and be completely equivalent (albeit still
  two distinct Python objects, with distinct link set & multi props &
  mutable props collections!)

* LinkSet / LinkWithPropsSet / TrackedList get `__copy__` and
  `__deepcopy__` methods
Y
Yury Selivanov committed
354778d163948acefcbf0110314a908f46227398
Parent: b887b84
Committed by Yury Selivanov <yury@edgedb.com> on 8/13/2025, 8:38:23 PM