4

The situation is pretty strange and I expect that there is something that I don't know about the pickle module.

I have two tuples s1 and s2. If I compare them it returns True.

s1 == s2
True

If I pickle them and compare results, it returns False

pickle.dumps(s1) == pickle.dumps(s2)
False

Let's look on these byte strings. They are really different:

pk1 = pickle.dumps(s1)
pk2 = pickle.dumps(s2)

print(pk1)
b'\x80\x03((X!\x00\x00\x00AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3q\x00X!\x00\x00\x00AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3q\x01K\x01\x86q\x02X!\x00\x00\x00AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2q\x03K\x02\x86q\x04X!\x00\x00\x00AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4q\x05K\x05\x86q\x06X!\x00\x00\x00DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3q\x07K\x04\x86q\x08X!\x00\x00\x00DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3q\tK\x04\x86q\nX!\x00\x00\x00DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3q\x0bK\x04\x86q\x0cX!\x00\x00\x00DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3q\rK\x04\x86q\x0eX!\x00\x00\x00HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2q\x0fK\x02\x86q\x10X!\x00\x00\x00HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2q\x11K\x02\x86q\x12X!\x00\x00\x00HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2q\x13K\x03\x86q\x14X!\x00\x00\x00NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3q\x15K\x00\x86q\x16X!\x00\x00\x00NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3q\x17K\x00\x86q\x18X!\x00\x00\x00PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3q\x19K\x04\x86q\x1aX!\x00\x00\x00PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3q\x1bK\x04\x86q\x1cX!\x00\x00\x00aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2q\x1dK\x02\x86q\x1eX!\x00\x00\x00aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2q\x1fK\x03\x86q tq!(h\x01h\x00K\x01\x86q"h\x03K\x03\x86q#h\x05K\x05\x86q$h\x07K\x04\x86q%h\tK\x03\x86q&h\x0bK\x04\x86q\'h\rK\x04\x86q(h\x0fK\x02\x86q)h\x11K\x01\x86q*h\x13K\x03\x86q+h\x15K\x00\x86q,h\x17K\x01\x86q-h\x19K\x03\x86q.h\x1bK\x04\x86q/h\x1dK\x02\x86q0h\x1fK\x03\x86q1tq2(h\x03h\x00K\x02\x86q3h\x01K\x03\x86q4h\x05K\x04\x86q5h\x07K\x03\x86q6h\tK\x03\x86q7h\x0bK\x02\x86q8h\rK\x03\x86q9h\x0fK\x00\x86q:h\x11K\x02\x86q;h\x13K\x02\x86q<h\x15K\x02\x86q=h\x17K\x02\x86q>h\x19K\x03\x86q?h\x1bK\x03\x86q@h\x1dK\x00\x86qAh\x1fK\x02\x86qBtqC(h\x05h\x00K\x05\x86qDh\x01K\x05\x86qEh\x03K\x04\x86qFh\x07K\x01\x86qGh\tK\x02\x86qHh\rK\x02\x86qIh\x0bK\x03\x86qJh\x0fK\x04\x86qKh\x11K\x04\x86qLh\x13K\x02\x86qMh\x15K\x05\x86qNh\x17K\x05\x86qOh\x19K\x02\x86qPh\x1bK\x02\x86qQh\x1dK\x04\x86qRh\x1fK\x02\x86qStqT(h\x07h\x00K\x04\x86qUh\x01K\x04\x86qVh\x03K\x03\x86qWh\x05K\x01\x86qXh\tK\x02\x86qYh\x0bK\x02\x86qZh\rK\x02\x86q[h\x0fK\x03\x86q\\h\x11K\x02\x86q]h\x13K\x01\x86q^h\x15K\x04\x86q_h\x17K\x04\x86q`h\x19K\x02\x86qah\x1bK\x02\x86qbh\x1dK\x03\x86qch\x1fK\x01\x86qdtqe(h\th\x00K\x04\x86qfh\x01K\x03\x86qgh\x03K\x03\x86qhh\x05K\x02\x86qih\x07K\x02\x86qjh\x0bK\x01\x86qkh\rK\x01\x86qlh\x0fK\x03\x86qmh\x11K\x02\x86qnh\x13K\x01\x86qoh\x15K\x03\x86qph\x17K\x04\x86qqh\x19K\x00\x86qrh\x1bK\x00\x86qsh\x1dK\x03\x86qth\x1fK\x01\x86qutqv(h\x0bh\x00K\x04\x86qwh\x01K\x04\x86qxh\x03K\x02\x86qyh\x05K\x03\x86qzh\x07K\x02\x86q{h\tK\x01\x86q|h\rK\x01\x86q}h\x0fK\x03\x86q~h\x11K\x03\x86q\x7fh\x13K\x02\x86q\x80h\x15K\x04\x86q\x81h\x17K\x04\x86q\x82h\x19K\x01\x86q\x83h\x1bK\x00\x86q\x84h\x1dK\x03\x86q\x85h\x1fK\x02\x86q\x86tq\x87(h\rh\x00K\x04\x86q\x88h\x01K\x04\x86q\x89h\x03K\x03\x86q\x8ah\x05K\x02\x86q\x8bh\x07K\x02\x86q\x8ch\tK\x01\x86q\x8dh\x0bK\x01\x86q\x8eh\x0fK\x03\x86q\x8fh\x11K\x03\x86q\x90h\x13K\x02\x86q\x91h\x15K\x04\x86q\x92h\x17K\x04\x86q\x93h\x19K\x01\x86q\x94h\x1bK\x00\x86q\x95h\x1dK\x03\x86q\x96h\x1fK\x02\x86q\x97tq\x98(h\x0fh\x00K\x02\x86q\x99h\x01K\x02\x86q\x9ah\x03K\x00\x86q\x9bh\x05K\x04\x86q\x9ch\x07K\x03\x86q\x9dh\tK\x03\x86q\x9eh\x0bK\x03\x86q\x9fh\rK\x03\x86q\xa0h\x11K\x02\x86q\xa1h\x13K\x02\x86q\xa2h\x15K\x02\x86q\xa3h\x17K\x02\x86q\xa4h\x19K\x03\x86q\xa5h\x1bK\x03\x86q\xa6h\x1dK\x00\x86q\xa7h\x1fK\x02\x86q\xa8tq\xa9(h\x11h\x00K\x02\x86q\xaah\x01K\x01\x86q\xabh\x03K\x02\x86q\xach\x05K\x04\x86q\xadh\x07K\x02\x86q\xaeh\tK\x02\x86q\xafh\x0bK\x03\x86q\xb0h\rK\x03\x86q\xb1h\x0fK\x02\x86q\xb2h\x13K\x01\x86q\xb3h\x15K\x01\x86q\xb4h\x17K\x02\x86q\xb5h\x19K\x02\x86q\xb6h\x1bK\x02\x86q\xb7h\x1dK\x02\x86q\xb8h\x1fK\x01\x86q\xb9tq\xba(h\x13h\x00K\x03\x86q\xbbh\x01K\x03\x86q\xbch\x03K\x02\x86q\xbdh\x05K\x02\x86q\xbeh\x07K\x01\x86q\xbfh\tK\x01\x86q\xc0h\x0bK\x02\x86q\xc1h\rK\x02\x86q\xc2h\x0fK\x02\x86q\xc3h\x11K\x01\x86q\xc4h\x15K\x03\x86q\xc5h\x17K\x03\x86q\xc6h\x19K\x01\x86q\xc7h\x1bK\x02\x86q\xc8h\x1dK\x02\x86q\xc9h\x1fK\x00\x86q\xcatq\xcb(h\x15h\x00K\x00\x86q\xcch\x01K\x00\x86q\xcdh\x03K\x02\x86q\xceh\x05K\x05\x86q\xcfh\x07K\x04\x86q\xd0h\tK\x03\x86q\xd1h\x0bK\x04\x86q\xd2h\rK\x04\x86q\xd3h\x0fK\x02\x86q\xd4h\x11K\x01\x86q\xd5h\x13K\x03\x86q\xd6h\x17K\x00\x86q\xd7h\x19K\x03\x86q\xd8h\x1bK\x04\x86q\xd9h\x1dK\x02\x86q\xdah\x1fK\x03\x86q\xdbtq\xdc(h\x17h\x00K\x00\x86q\xddh\x01K\x01\x86q\xdeh\x03K\x02\x86q\xdfh\x05K\x05\x86q\xe0h\x07K\x04\x86q\xe1h\tK\x04\x86q\xe2h\x0bK\x04\x86q\xe3h\rK\x04\x86q\xe4h\x0fK\x02\x86q\xe5h\x11K\x02\x86q\xe6h\x13K\x03\x86q\xe7h\x15K\x00\x86q\xe8h\x19K\x04\x86q\xe9h\x1bK\x04\x86q\xeah\x1dK\x02\x86q\xebh\x1fK\x03\x86q\xectq\xed(h\x19h\x00K\x04\x86q\xeeh\x01K\x03\x86q\xefh\x03K\x03\x86q\xf0h\x05K\x02\x86q\xf1h\x07K\x02\x86q\xf2h\tK\x00\x86q\xf3h\x0bK\x01\x86q\xf4h\rK\x01\x86q\xf5h\x0fK\x03\x86q\xf6h\x11K\x02\x86q\xf7h\x13K\x01\x86q\xf8h\x15K\x03\x86q\xf9h\x17K\x04\x86q\xfah\x1bK\x00\x86q\xfbh\x1dK\x03\x86q\xfch\x1fK\x01\x86q\xfdtq\xfe(h\x1bh\x00K\x04\x86q\xffh\x01K\x04\x86r\x00\x01\x00\x00h\x03K\x03\x86r\x01\x01\x00\x00h\x05K\x02\x86r\x02\x01\x00\x00h\x07K\x02\x86r\x03\x01\x00\x00h\tK\x00\x86r\x04\x01\x00\x00h\x0bK\x00\x86r\x05\x01\x00\x00h\rK\x00\x86r\x06\x01\x00\x00h\x0fK\x03\x86r\x07\x01\x00\x00h\x11K\x02\x86r\x08\x01\x00\x00h\x13K\x02\x86r\t\x01\x00\x00h\x15K\x04\x86r\n\x01\x00\x00h\x17K\x04\x86r\x0b\x01\x00\x00h\x19K\x00\x86r\x0c\x01\x00\x00h\x1dK\x03\x86r\r\x01\x00\x00h\x1fK\x02\x86r\x0e\x01\x00\x00tr\x0f\x01\x00\x00(h\x1dh\x00K\x02\x86r\x10\x01\x00\x00h\x01K\x02\x86r\x11\x01\x00\x00h\x03K\x00\x86r\x12\x01\x00\x00h\x05K\x04\x86r\x13\x01\x00\x00h\x07K\x03\x86r\x14\x01\x00\x00h\tK\x03\x86r\x15\x01\x00\x00h\x0bK\x03\x86r\x16\x01\x00\x00h\rK\x03\x86r\x17\x01\x00\x00h\x0fK\x00\x86r\x18\x01\x00\x00h\x11K\x02\x86r\x19\x01\x00\x00h\x13K\x02\x86r\x1a\x01\x00\x00h\x15K\x02\x86r\x1b\x01\x00\x00h\x17K\x02\x86r\x1c\x01\x00\x00h\x19K\x03\x86r\x1d\x01\x00\x00h\x1bK\x03\x86r\x1e\x01\x00\x00h\x1fK\x02\x86r\x1f\x01\x00\x00tr \x01\x00\x00(h\x1fh\x00K\x03\x86r!\x01\x00\x00h\x01K\x03\x86r"\x01\x00\x00h\x03K\x02\x86r#\x01\x00\x00h\x05K\x02\x86r$\x01\x00\x00h\x07K\x01\x86r%\x01\x00\x00h\tK\x01\x86r&\x01\x00\x00h\x0bK\x02\x86r\'\x01\x00\x00h\rK\x02\x86r(\x01\x00\x00h\x0fK\x02\x86r)\x01\x00\x00h\x11K\x01\x86r*\x01\x00\x00h\x13K\x00\x86r+\x01\x00\x00h\x15K\x03\x86r,\x01\x00\x00h\x17K\x03\x86r-\x01\x00\x00h\x19K\x01\x86r.\x01\x00\x00h\x1bK\x02\x86r/\x01\x00\x00h\x1dK\x02\x86r0\x01\x00\x00tr1\x01\x00\x00tr2\x01\x00\x00.'

print(pk2)
b'\x80\x03((X!\x00\x00\x00AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3q\x00X!\x00\x00\x00AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3q\x01K\x01\x86q\x02X!\x00\x00\x00AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2q\x03K\x02\x86q\x04X!\x00\x00\x00AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4q\x05K\x05\x86q\x06X!\x00\x00\x00DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3q\x07K\x04\x86q\x08X!\x00\x00\x00DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3q\tK\x04\x86q\nX!\x00\x00\x00DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3q\x0bK\x04\x86q\x0cX!\x00\x00\x00DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3q\rK\x04\x86q\x0eX!\x00\x00\x00HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2q\x0fK\x02\x86q\x10X!\x00\x00\x00HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2q\x11K\x02\x86q\x12X!\x00\x00\x00HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2q\x13K\x03\x86q\x14X!\x00\x00\x00NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3q\x15K\x00\x86q\x16X!\x00\x00\x00NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3q\x17K\x00\x86q\x18X!\x00\x00\x00PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3q\x19K\x04\x86q\x1aX!\x00\x00\x00PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3q\x1bK\x04\x86q\x1cX!\x00\x00\x00aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2q\x1dK\x02\x86q\x1eX!\x00\x00\x00aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2q\x1fK\x03\x86q tq!(h\x01h\x00K\x01\x86q"h\x03K\x03\x86q#h\x05K\x05\x86q$h\x07K\x04\x86q%h\tK\x03\x86q&h\x0bK\x04\x86q\'h\rK\x04\x86q(h\x0fK\x02\x86q)h\x11K\x01\x86q*h\x13K\x03\x86q+h\x15K\x00\x86q,h\x17K\x01\x86q-h\x19K\x03\x86q.h\x1bK\x04\x86q/h\x1dK\x02\x86q0h\x1fK\x03\x86q1tq2(h\x03h\x00K\x02\x86q3h\x01K\x03\x86q4h\x05K\x04\x86q5h\x07K\x03\x86q6h\tK\x03\x86q7h\rK\x02\x86q8h\x0bK\x03\x86q9h\x0fK\x00\x86q:h\x11K\x02\x86q;h\x13K\x02\x86q<h\x15K\x02\x86q=h\x17K\x02\x86q>h\x19K\x03\x86q?h\x1bK\x03\x86q@h\x1dK\x00\x86qAh\x1fK\x02\x86qBtqC(h\x05h\x00K\x05\x86qDh\x01K\x05\x86qEh\x03K\x04\x86qFh\x07K\x01\x86qGh\tK\x02\x86qHh\x0bK\x02\x86qIh\rK\x03\x86qJh\x0fK\x04\x86qKh\x11K\x04\x86qLh\x13K\x02\x86qMh\x15K\x05\x86qNh\x17K\x05\x86qOh\x19K\x02\x86qPh\x1bK\x02\x86qQh\x1dK\x04\x86qRh\x1fK\x02\x86qStqT(h\x07h\x00K\x04\x86qUh\x01K\x04\x86qVh\x03K\x03\x86qWh\x05K\x01\x86qXh\tK\x02\x86qYh\x0bK\x02\x86qZh\rK\x02\x86q[h\x0fK\x03\x86q\\h\x11K\x02\x86q]h\x13K\x01\x86q^h\x15K\x04\x86q_h\x17K\x04\x86q`h\x19K\x02\x86qah\x1bK\x02\x86qbh\x1dK\x03\x86qch\x1fK\x01\x86qdtqe(h\th\x00K\x04\x86qfh\x01K\x03\x86qgh\x03K\x03\x86qhh\x05K\x02\x86qih\x07K\x02\x86qjh\x0bK\x01\x86qkh\rK\x01\x86qlh\x0fK\x03\x86qmh\x11K\x02\x86qnh\x13K\x01\x86qoh\x15K\x03\x86qph\x17K\x04\x86qqh\x19K\x00\x86qrh\x1bK\x00\x86qsh\x1dK\x03\x86qth\x1fK\x01\x86qutqv(h\rh\x00K\x04\x86qwh\x01K\x04\x86qxh\x03K\x02\x86qyh\x05K\x03\x86qzh\x07K\x02\x86q{h\tK\x01\x86q|h\x0bK\x01\x86q}h\x0fK\x03\x86q~h\x11K\x03\x86q\x7fh\x13K\x02\x86q\x80h\x15K\x04\x86q\x81h\x17K\x04\x86q\x82h\x19K\x01\x86q\x83h\x1bK\x00\x86q\x84h\x1dK\x03\x86q\x85h\x1fK\x02\x86q\x86tq\x87(h\x0bh\x00K\x04\x86q\x88h\x01K\x04\x86q\x89h\x03K\x03\x86q\x8ah\x05K\x02\x86q\x8bh\x07K\x02\x86q\x8ch\tK\x01\x86q\x8dh\rK\x01\x86q\x8eh\x0fK\x03\x86q\x8fh\x11K\x03\x86q\x90h\x13K\x02\x86q\x91h\x15K\x04\x86q\x92h\x17K\x04\x86q\x93h\x19K\x01\x86q\x94h\x1bK\x00\x86q\x95h\x1dK\x03\x86q\x96h\x1fK\x02\x86q\x97tq\x98(h\x0fh\x00K\x02\x86q\x99h\x01K\x02\x86q\x9ah\x03K\x00\x86q\x9bh\x05K\x04\x86q\x9ch\x07K\x03\x86q\x9dh\tK\x03\x86q\x9eh\x0bK\x03\x86q\x9fh\rK\x03\x86q\xa0h\x11K\x02\x86q\xa1h\x13K\x02\x86q\xa2h\x15K\x02\x86q\xa3h\x17K\x02\x86q\xa4h\x19K\x03\x86q\xa5h\x1bK\x03\x86q\xa6h\x1dK\x00\x86q\xa7h\x1fK\x02\x86q\xa8tq\xa9(h\x11h\x00K\x02\x86q\xaah\x01K\x01\x86q\xabh\x03K\x02\x86q\xach\x05K\x04\x86q\xadh\x07K\x02\x86q\xaeh\tK\x02\x86q\xafh\x0bK\x03\x86q\xb0h\rK\x03\x86q\xb1h\x0fK\x02\x86q\xb2h\x13K\x01\x86q\xb3h\x15K\x01\x86q\xb4h\x17K\x02\x86q\xb5h\x19K\x02\x86q\xb6h\x1bK\x02\x86q\xb7h\x1dK\x02\x86q\xb8h\x1fK\x01\x86q\xb9tq\xba(h\x13h\x00K\x03\x86q\xbbh\x01K\x03\x86q\xbch\x03K\x02\x86q\xbdh\x05K\x02\x86q\xbeh\x07K\x01\x86q\xbfh\tK\x01\x86q\xc0h\x0bK\x02\x86q\xc1h\rK\x02\x86q\xc2h\x0fK\x02\x86q\xc3h\x11K\x01\x86q\xc4h\x15K\x03\x86q\xc5h\x17K\x03\x86q\xc6h\x19K\x01\x86q\xc7h\x1bK\x02\x86q\xc8h\x1dK\x02\x86q\xc9h\x1fK\x00\x86q\xcatq\xcb(h\x15h\x00K\x00\x86q\xcch\x01K\x00\x86q\xcdh\x03K\x02\x86q\xceh\x05K\x05\x86q\xcfh\x07K\x04\x86q\xd0h\tK\x03\x86q\xd1h\x0bK\x04\x86q\xd2h\rK\x04\x86q\xd3h\x0fK\x02\x86q\xd4h\x11K\x01\x86q\xd5h\x13K\x03\x86q\xd6h\x17K\x00\x86q\xd7h\x19K\x03\x86q\xd8h\x1bK\x04\x86q\xd9h\x1dK\x02\x86q\xdah\x1fK\x03\x86q\xdbtq\xdc(h\x17h\x00K\x00\x86q\xddh\x01K\x01\x86q\xdeh\x03K\x02\x86q\xdfh\x05K\x05\x86q\xe0h\x07K\x04\x86q\xe1h\tK\x04\x86q\xe2h\x0bK\x04\x86q\xe3h\rK\x04\x86q\xe4h\x0fK\x02\x86q\xe5h\x11K\x02\x86q\xe6h\x13K\x03\x86q\xe7h\x15K\x00\x86q\xe8h\x19K\x04\x86q\xe9h\x1bK\x04\x86q\xeah\x1dK\x02\x86q\xebh\x1fK\x03\x86q\xectq\xed(h\x19h\x00K\x04\x86q\xeeh\x01K\x03\x86q\xefh\x03K\x03\x86q\xf0h\x05K\x02\x86q\xf1h\x07K\x02\x86q\xf2h\tK\x00\x86q\xf3h\x0bK\x01\x86q\xf4h\rK\x01\x86q\xf5h\x0fK\x03\x86q\xf6h\x11K\x02\x86q\xf7h\x13K\x01\x86q\xf8h\x15K\x03\x86q\xf9h\x17K\x04\x86q\xfah\x1bK\x00\x86q\xfbh\x1dK\x03\x86q\xfch\x1fK\x01\x86q\xfdtq\xfe(h\x1bh\x00K\x04\x86q\xffh\x01K\x04\x86r\x00\x01\x00\x00h\x03K\x03\x86r\x01\x01\x00\x00h\x05K\x02\x86r\x02\x01\x00\x00h\x07K\x02\x86r\x03\x01\x00\x00h\tK\x00\x86r\x04\x01\x00\x00h\x0bK\x00\x86r\x05\x01\x00\x00h\rK\x00\x86r\x06\x01\x00\x00h\x0fK\x03\x86r\x07\x01\x00\x00h\x11K\x02\x86r\x08\x01\x00\x00h\x13K\x02\x86r\t\x01\x00\x00h\x15K\x04\x86r\n\x01\x00\x00h\x17K\x04\x86r\x0b\x01\x00\x00h\x19K\x00\x86r\x0c\x01\x00\x00h\x1dK\x03\x86r\r\x01\x00\x00h\x1fK\x02\x86r\x0e\x01\x00\x00tr\x0f\x01\x00\x00(h\x1dh\x00K\x02\x86r\x10\x01\x00\x00h\x01K\x02\x86r\x11\x01\x00\x00h\x03K\x00\x86r\x12\x01\x00\x00h\x05K\x04\x86r\x13\x01\x00\x00h\x07K\x03\x86r\x14\x01\x00\x00h\tK\x03\x86r\x15\x01\x00\x00h\x0bK\x03\x86r\x16\x01\x00\x00h\rK\x03\x86r\x17\x01\x00\x00h\x0fK\x00\x86r\x18\x01\x00\x00h\x11K\x02\x86r\x19\x01\x00\x00h\x13K\x02\x86r\x1a\x01\x00\x00h\x15K\x02\x86r\x1b\x01\x00\x00h\x17K\x02\x86r\x1c\x01\x00\x00h\x19K\x03\x86r\x1d\x01\x00\x00h\x1bK\x03\x86r\x1e\x01\x00\x00h\x1fK\x02\x86r\x1f\x01\x00\x00tr \x01\x00\x00(h\x1fh\x00K\x03\x86r!\x01\x00\x00h\x01K\x03\x86r"\x01\x00\x00h\x03K\x02\x86r#\x01\x00\x00h\x05K\x02\x86r$\x01\x00\x00h\x07K\x01\x86r%\x01\x00\x00h\tK\x01\x86r&\x01\x00\x00h\x0bK\x02\x86r\'\x01\x00\x00h\rK\x02\x86r(\x01\x00\x00h\x0fK\x02\x86r)\x01\x00\x00h\x11K\x01\x86r*\x01\x00\x00h\x13K\x00\x86r+\x01\x00\x00h\x15K\x03\x86r,\x01\x00\x00h\x17K\x03\x86r-\x01\x00\x00h\x19K\x01\x86r.\x01\x00\x00h\x1bK\x02\x86r/\x01\x00\x00h\x1dK\x02\x86r0\x01\x00\x00tr1\x01\x00\x00tr2\x01\x00\x00.'

for n, (i, j) in enumerate(zip(pk1, pk2)):
    if i != j:
        print(n, i, j)

924 11 13
931 13 11
1042 13 11
1049 11 13
1359 11 13
1403 13 11
1477 13 11
1521 11 13

If I unpickle them back and compare results they are identical:

upk1 = pickle.loads(pk1)
upk2 = pickle.loads(pk2)

print(upk1 == upk2)
True

So the questions are what is caused this issue and how to avoid it? Are there some metadata pickled?

Hmm, I found one related question Python pickle not one-to-one: different pickles give same object. So pickle can return different results for the identical objects? And thus it is inappropriate for hash calculation? Since I planned to calculate md5 hashes based on pickled representation.

UPDATE: text representation of s1 and s2:

(('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3',
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 1),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 2),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 5),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 4),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 4),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 4),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 4),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 2),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 3),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 0),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 0),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 4),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 4),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 2),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 3)),
 ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 1),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 3),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 5),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 4),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 3),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 4),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 4),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 2),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 1),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 3),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 0),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 1),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 3),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 4),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 2),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 3)),
 ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 2),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 3),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 4),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 3),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 3),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 3),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 0),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 2),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 2),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 2),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 3),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 3),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 0),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 2)),
 ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 5),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 5),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 4),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 1),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 3),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 4),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 4),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 2),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 5),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 5),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 2),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 2),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 4),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 2)),
 ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 4),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 4),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 3),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 1),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 2),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 3),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 1),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 4),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 4),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 2),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 2),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 3),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 1)),
 ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 4),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 3),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 3),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 2),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 1),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 1),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 3),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 1),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 3),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 4),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 0),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 0),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 3),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 1)),
 ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 4),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 4),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 2),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 3),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 2),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 1),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 1),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 3),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 3),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 2),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 4),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 4),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 1),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 0),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 3),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 2)),
 ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 4),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 4),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 3),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 2),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 2),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 1),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 1),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 3),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 3),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 2),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 4),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 4),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 1),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 0),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 3),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 2)),
 ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 2),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 2),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 0),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 4),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 3),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 3),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 3),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 3),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 2),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 2),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 2),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 3),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 3),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 0),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 2)),
 ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 2),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 1),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 2),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 4),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 2),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 3),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 3),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 1),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 1),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 2),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 2),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 2),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 2),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 1)),
 ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 3),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 3),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 2),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 2),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 1),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 1),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 2),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 2),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 1),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 3),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 3),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 1),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 2),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 2),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 0)),
 ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 0),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 0),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 2),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 5),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 4),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 3),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 4),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 4),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 2),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 1),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 3),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 0),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 3),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 4),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 2),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 3)),
 ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 0),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 1),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 2),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 5),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 4),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 4),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 4),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 4),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 2),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 3),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 0),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 4),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 4),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 2),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 3)),
 ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 4),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 3),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 3),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 2),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 2),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 0),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 1),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 1),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 3),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 1),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 3),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 4),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 0),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 3),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 1)),
 ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 4),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 4),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 3),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 2),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 2),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 0),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 0),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 0),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 3),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 2),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 4),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 4),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 0),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 3),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 2)),
 ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 2),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 2),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 0),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 4),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 3),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 3),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 3),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 3),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 0),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 2),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 2),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 2),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 2),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 3),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 3),
  ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2', 2)),
 ('aA2A2A3A3D1D1D2D2H0H1H2N3N3P1P2a2',
  ('AA1A2A5D4D4D4D4H2H2H3N0N0P4P4a2a3', 3),
  ('AA1A3A5D3D4D4D4H1H2H3N0N1P3P4a2a3', 3),
  ('AA2A3A4D2D3D3D3H0H2H2N2N2P3P3a0a2', 2),
  ('AA4A5A5D1D2D2D3H2H4H4N5N5P2P2a2a4', 2),
  ('DA1A3A4A4D2D2D2H1H2H3N4N4P2P2a1a3', 1),
  ('DA2A3A3A4D1D1D2H1H2H3N3N4P0P0a1a3', 1),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 2),
  ('DA2A3A4A4D1D1D2H2H3H3N4N4P0P1a2a3', 2),
  ('HA0A2A2A4D3D3D3D3H2H2N2N2P3P3a0a2', 2),
  ('HA1A2A2A4D2D2D3D3H1H2N1N2P2P2a1a2', 1),
  ('HA2A2A3A3D1D1D2D2H1H2N3N3P1P2a0a2', 0),
  ('NA0A0A2A5D3D4D4D4H1H2H3N0P3P4a2a3', 3),
  ('NA0A1A2A5D4D4D4D4H2H2H3N0P4P4a2a3', 3),
  ('PA2A3A3A4D0D1D1D2H1H2H3N3N4P0a1a3', 1),
  ('PA2A3A4A4D0D0D0D2H2H2H3N4N4P0a2a3', 2),
  ('aA0A2A2A4D3D3D3D3H0H2H2N2N2P3P3a2', 2)))
Community
  • 1
  • 1
DrDom
  • 4,033
  • 1
  • 21
  • 23
  • 1
    What's the content of the tuples? `s1` and `s2` are considered equal if each of their elements are also equal. If the types of those elements override the equality operator (by defining `__eq__`), then two different objects with different internal state (as seen by `pickle`) can be considered equal. – Will Vousden Jun 10 '16 at 12:17
  • What are you using the hashes for? Do you want them, for example, to distinguish between `1` and `1.0`? (As a more tangential thing, where are the objects you're pickling going to be coming from?) – mwchase Jun 10 '16 at 12:22
  • @WillVousden, I added text representation of `s1` and `s2` (they are identical). They are tuple of tuples of strings and integers.`s1` and `s2` are hashable and `hash` works perfectly, However it is not suitable for storing and duplicates finding, since it has a high chance of collisions. – DrDom Jun 10 '16 at 12:36
  • This problem happened to me with json.dumps. The strings are different but when the files are unpickled, are the same –  Jun 10 '16 at 12:38
  • @mwchase, I generate these object `s1` and `s2` by myself using two different procedures. Almost all of them were identical according to md5 hashes except several cases. However I discovered that in reality objects with different md5 hashes are identical but their pickled versions are different. – DrDom Jun 10 '16 at 12:42
  • 1
    If you want to compute the hash you can always just do `hash(repr(s1))`. `repr` will return you the same representation if the tuples are equal. – Bakuriu Jun 10 '16 at 13:02

2 Answers2

6

The problem is that pickle preserves identity relationships between subobjects (this is for efficiency and to handle recursive objects):

a1 = "a" * 30
a2 = "a" * 30
s1 = (a1, a2, a1)
s2 = (a1, a2, a2)
print(pickle.dumps(s1) == pickle.dumps(s2))
False

Here, a1 and a2 are equal but are different objects (they have a different id; see When does python choose to intern a string); s1 and s2 are again equal but in s1 the third element is the same object as the first element, while in s2 the third element is the same object as the second element.

We can see this by disassembling the pickles:

>>> pickletools.dis(pickle.dumps(s1))
    0: \x80 PROTO      3
    2: X    BINUNICODE 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
   37: q    BINPUT     0
   39: X    BINUNICODE 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
   74: q    BINPUT     1
   76: h    BINGET     0  # <=== watch this line *********************
   78: \x87 TUPLE3
   79: q    BINPUT     2
   81: .    STOP
highest protocol among opcodes = 2

>>> pickletools.dis(pickle.dumps(s2))
    0: \x80 PROTO      3
    2: X    BINUNICODE 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
   37: q    BINPUT     0
   39: X    BINUNICODE 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'
   74: q    BINPUT     1
   76: h    BINGET     1  # <=== this is different *********************
   78: \x87 TUPLE3
   79: q    BINPUT     2
   81: .    STOP
highest protocol among opcodes = 2

A quick (if inefficient) workaround could be to break the object identities by using ast.literal_eval to recreate the tuples from their repr:

>>> print(pickle.dumps(ast.literal_eval(repr(s1))) == pickle.dumps(ast.literal_eval(repr(s2))))
True
Community
  • 1
  • 1
ecatmur
  • 152,476
  • 27
  • 293
  • 366
  • Great explanation and interesting nitty-gritty :) – DrDom Jun 10 '16 at 13:12
  • But what is an advantage in usage of `ast.literal_eval`? It works with `repr` only. – DrDom Jun 10 '16 at 13:16
  • 1
    @DrDom `ast.literal_eval` reverses `repr` for plain data objects, so it gives you back tuple objects that you could continue to work with. If you're only using `pickle` for the hash then using `repr` directly would be fine. – ecatmur Jun 10 '16 at 13:20
0

I've tried with marshal module (https://docs.python.org/2/library/marshal.html#module-marshal), and works. Look the example

import marshal
# code ...
string1 = marshal.dumps(sp1)
  • 1
    This comment is related to differences in `pickle` and `cPickle`. I used only `pickle` module. – DrDom Jun 10 '16 at 12:45
  • Yes, you have reason, I removed the section. I tested marshal module and works!, look at the edit. –  Jun 10 '16 at 13:00
  • Yes, it works, looks that `marshar` works more consistently then `pickle` for serialization. However, I expect that it is not recommended to use it since maintainers may change this module in incompartible way (according to the given link description). – DrDom Jun 10 '16 at 13:08