The function is called getGlobalPlacement() (Python) and globalPlacement() (C++) which checks its "in-list" and stops after the first parent object it finds.
When duplicating the part container without sub-elements it creates a new completely empty part container which so far is correct behaviour.I have submitted a PR to throw error in case of copy GeoFeatureGroup/OriginGroup/Part without dependency.
However, a part container without an origin gets into a broken state as soon as you want to add an object. And it's a bit tricky to fix a broken container manually.
I wonder whether there is any sensible use case where a part container (or body object) doesn't have an origin or shares it with another container (the PR makes it more difficult but not impossible)?
If not, doesn't it make sense to make sure that a part container or body object always have its own origin?