After `_csv.register_dialect` is called, the csv module is alive even after it's removed from sys.modules. It should be garbage-collected.
(It's not that big a deal: unloading _csv isn't something users should do. But it might be hiding a deeper issue.)
The following reproducer (for a debug build of Python) shows an increasing number of refcounts. (Importing `csv` is the easiest way to call _csv._register_dialect with a proper argument):
import sys
import gc
for i in range(10):
import csv
del sys.modules['_csv']
del sys.modules['csv']
del csv
gc.collect()
print(sys.gettotalrefcount()) |