diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/sqlalchemy/orm/attributes.py | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/lib/sqlalchemy/orm/attributes.py b/lib/sqlalchemy/orm/attributes.py index 662ea05d3..79be76c3a 100644 --- a/lib/sqlalchemy/orm/attributes.py +++ b/lib/sqlalchemy/orm/attributes.py @@ -1427,11 +1427,15 @@ class History(tuple): elif original is NEVER_SET: return cls((), list(current), ()) else: - collection = util.OrderedIdentitySet(current) - s = util.OrderedIdentitySet(original) - return cls(list(collection.difference(s)), - list(collection.intersection(s)), - list(s.difference(collection))) + current_set = util.IdentitySet(current) + original_set = util.IdentitySet(original) + + # ensure duplicates are maintained + return cls( + [x for x in current if x not in original_set], + [x for x in current if x in original_set], + [x for x in original if x not in current_set] + ) else: if current is NO_VALUE: if original not in [None, NEVER_SET, NO_VALUE]: |
