@@ -814,7 +814,7 @@ def __init__(self, container: Container, indices: tuple[int, ...]) -> None:
814814 table_idx = len (self ._tables ) - 1
815815 for k , v in item .value .body :
816816 self ._internal_container ._raw_append (k , v )
817- self ._tables_map [ k ] = table_idx
817+ self ._tables_map . setdefault ( k , []). append ( table_idx )
818818 if k is not None :
819819 dict .__setitem__ (self , k .key , v )
820820
@@ -835,8 +835,12 @@ def __getitem__(self, key: Key | str) -> Any:
835835
836836 def __setitem__ (self , key : Key | str , item : Any ) -> None :
837837 if key in self ._tables_map :
838- table = self ._tables [self ._tables_map [key ]]
839- table [key ] = item
838+ # Overwrite the first table and remove others
839+ indices = self ._tables_map [key ]
840+ while len (indices ) > 1 :
841+ table = self ._tables [indices .pop ()]
842+ self ._remove_table (table )
843+ self ._tables [indices [0 ]][key ] = item
840844 elif self ._tables :
841845 table = self ._tables [0 ]
842846 table [key ] = item
@@ -856,15 +860,16 @@ def _remove_table(self, table: Table) -> None:
856860 break
857861
858862 def __delitem__ (self , key : Key | str ) -> None :
859- if key in self ._tables_map :
860- table = self ._tables [self ._tables_map [key ]]
863+ if key not in self ._tables_map :
864+ raise NonExistentKey (key )
865+
866+ for i in reversed (self ._tables_map [key ]):
867+ table = self ._tables [i ]
861868 del table [key ]
862869 if not table and len (self ._tables ) > 1 :
863870 self ._remove_table (table )
864- del self ._tables_map [key ]
865- else :
866- raise NonExistentKey (key )
867871
872+ del self ._tables_map [key ]
868873 del self ._internal_container [key ]
869874 if key is not None :
870875 dict .__delitem__ (self , key )
0 commit comments