TL;DR — Copying fails if a value is an iterator.
To create a duplicate of a data structure, Python provides methods copy() and deepcopy(). Lately, I wanted to duplicate a nested structure with deepcopy() and encountered following issue:
TypeError: object.__new__(dict_keys) is not safe, use dict_keys.__new__()
And ...more ...
Imagine in your program you compare two variables which contain strings. You are pretty sure that under certain circumstances both variables contain the same strings, — but somehow Python insists that they do not!
For a quick debug, you print out both variables and get
>>> print(s1, s2, s1 == s2) b ...