このエラーメッセージは
「pickle化しようとしているオブジェクトの型のオブジェクト」
と
「pickle化しようとしているオブジェクトの型のオブジェクト」の、「モジュール名+型名(*)」に束縛されているオブジェクト
が違う時に起きます。
(*) x.__class__.__module__ + '.' + x.__class__.__qualname__
と思っておけばだいたい合ってます)
例えば
python
1import pickle
2
3class A:
4 pass
5
6a = A()
7
8def A():
9 pass
10
11# ★
12pickle.dumps(a)
で起きます。
pickle化しようとしている「「aに束縛されているオブジェクト」の型のオブジェクト」の名前は __main__.A
ですが、
★ の時点で __main__.A
という名前に束縛されているのは、その型のオブジェクトでなくなっているため
plain
1Traceback (most recent call last):
2 File "/Users/hogehoge/pickle_err.py", line 12, in <module>
3 pickle.dumps(a)
4_pickle.PicklingError: Can't pickle <class '__main__.A'>: it's not the same object as __main__.A
というエラーになります。
このエラーを質問のコードで出す具体的な方法はまったく思いつきません。
訂正
エラーを出すだけのコードは簡単でした。思いつかないのは「前の書き方でエラーが起きて後の書き方でエラーが起きない」コードです。
(自分には想像できないけどすごくひねたコードを書いたらできるのでは? という感じもしません)
質問者さんが遭遇したエラーがこのメカニズムで起きたものかどうか判断することはこちらにはできません。
import文を変えてエラーがでなくなったということですが、前の書き方ではエラーが起きて後の書き方ではエラーが起きないようなコードがそこにあったんだろうなぁ、という以上のことはこちらには何も言えません。