ad_items_dict_copy = ad_items_dict.copy()
это у вас сделает только поверхностную копию словарей!
вложенные словари из которых вы удаляете ключи при итерации в обоих случаях будут одинаковым.
если вам нужно прям скопировать можно воспользоваться deepcopy
а вообще можно воспользоваться подобным (py3):
ad_items_dict = {'1': {
'1.1': {
'url_dict': {
'1.1': 123
}
}
}}
for kitem, vitem in ad_items_dict.items():
for value in vitem.values():
value['url_dict'] = {k.replace('.', '_'): v for k, v in value['url_dict'].items()}
ad_items_dict[kitem] = {k.replace('.', '_'): v for k, v in vitem.items()}
# {'1': {'1_1': {'url_dict': {'1_1': 123}}}}
никаких копирований не требуется вообще, и код чище.