@@ -63,10 +63,17 @@ def test_basics(self):
6363 for m1 , m2 in zip (d .maps [1 :], e .maps [1 :]):
6464 self .assertIs (m1 , m2 )
6565
66- for e in [pickle .loads (pickle .dumps (d )),
67- copy .deepcopy (d ),
66+ # check deep copies
67+ for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
68+ e = pickle .loads (pickle .dumps (d , proto ))
69+ self .assertEqual (d , e )
70+ self .assertEqual (d .maps , e .maps )
71+ self .assertIsNot (d , e )
72+ for m1 , m2 in zip (d .maps , e .maps ):
73+ self .assertIsNot (m1 , m2 , e )
74+ for e in [copy .deepcopy (d ),
6875 eval (repr (d ))
69- ]: # check deep copies
76+ ]:
7077 self .assertEqual (d , e )
7178 self .assertEqual (d .maps , e .maps )
7279 self .assertIsNot (d , e )
@@ -1110,28 +1117,21 @@ def test_copying(self):
11101117 # Check that counters are copyable, deepcopyable, picklable, and
11111118 #have a repr/eval round-trip
11121119 words = Counter ('which witch had which witches wrist watch' .split ())
1120+ def check (dup ):
1121+ msg = "\n copy: %s\n words: %s" % (dup , words )
1122+ self .assertIsNot (dup , words , msg )
1123+ self .assertEqual (dup , words )
1124+ check (words .copy ())
1125+ check (copy .copy (words ))
1126+ check (copy .deepcopy (words ))
1127+ for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
1128+ with self .subTest (proto = proto ):
1129+ check (pickle .loads (pickle .dumps (words , proto )))
1130+ check (eval (repr (words )))
11131131 update_test = Counter ()
11141132 update_test .update (words )
1115- for label , dup in [
1116- ('words.copy()' , words .copy ()),
1117- ('copy.copy(words)' , copy .copy (words )),
1118- ('copy.deepcopy(words)' , copy .deepcopy (words )),
1119- ('pickle.loads(pickle.dumps(words, 0))' ,
1120- pickle .loads (pickle .dumps (words , 0 ))),
1121- ('pickle.loads(pickle.dumps(words, 1))' ,
1122- pickle .loads (pickle .dumps (words , 1 ))),
1123- ('pickle.loads(pickle.dumps(words, 2))' ,
1124- pickle .loads (pickle .dumps (words , 2 ))),
1125- ('pickle.loads(pickle.dumps(words, -1))' ,
1126- pickle .loads (pickle .dumps (words , - 1 ))),
1127- ('eval(repr(words))' , eval (repr (words ))),
1128- ('update_test' , update_test ),
1129- ('Counter(words)' , Counter (words )),
1130- ]:
1131- with self .subTest (label = label ):
1132- msg = "\n copy: %s\n words: %s" % (dup , words )
1133- self .assertIsNot (dup , words , msg )
1134- self .assertEqual (dup , words )
1133+ check (update_test )
1134+ check (Counter (words ))
11351135
11361136 def test_copy_subclass (self ):
11371137 class MyCounter (Counter ):
@@ -1433,30 +1433,21 @@ def test_copying(self):
14331433 # and have a repr/eval round-trip
14341434 pairs = [('c' , 1 ), ('b' , 2 ), ('a' , 3 ), ('d' , 4 ), ('e' , 5 ), ('f' , 6 )]
14351435 od = OrderedDict (pairs )
1436+ def check (dup ):
1437+ msg = "\n copy: %s\n od: %s" % (dup , od )
1438+ self .assertIsNot (dup , od , msg )
1439+ self .assertEqual (dup , od )
1440+ check (od .copy ())
1441+ check (copy .copy (od ))
1442+ check (copy .deepcopy (od ))
1443+ for proto in range (pickle .HIGHEST_PROTOCOL + 1 ):
1444+ with self .subTest (proto = proto ):
1445+ check (pickle .loads (pickle .dumps (od , proto )))
1446+ check (eval (repr (od )))
14361447 update_test = OrderedDict ()
14371448 update_test .update (od )
1438- for label , dup in [
1439- ('od.copy()' , od .copy ()),
1440- ('copy.copy(od)' , copy .copy (od )),
1441- ('copy.deepcopy(od)' , copy .deepcopy (od )),
1442- ('pickle.loads(pickle.dumps(od, 0))' ,
1443- pickle .loads (pickle .dumps (od , 0 ))),
1444- ('pickle.loads(pickle.dumps(od, 1))' ,
1445- pickle .loads (pickle .dumps (od , 1 ))),
1446- ('pickle.loads(pickle.dumps(od, 2))' ,
1447- pickle .loads (pickle .dumps (od , 2 ))),
1448- ('pickle.loads(pickle.dumps(od, 3))' ,
1449- pickle .loads (pickle .dumps (od , 3 ))),
1450- ('pickle.loads(pickle.dumps(od, -1))' ,
1451- pickle .loads (pickle .dumps (od , - 1 ))),
1452- ('eval(repr(od))' , eval (repr (od ))),
1453- ('update_test' , update_test ),
1454- ('OrderedDict(od)' , OrderedDict (od )),
1455- ]:
1456- with self .subTest (label = label ):
1457- msg = "\n copy: %s\n od: %s" % (dup , od )
1458- self .assertIsNot (dup , od , msg )
1459- self .assertEqual (dup , od )
1449+ check (update_test )
1450+ check (OrderedDict (od ))
14601451
14611452 def test_yaml_linkage (self ):
14621453 # Verify that __reduce__ is setup in a way that supports PyYAML's dump() feature.
0 commit comments