python 字典的值在for循环中被莫名其妙修改,被非预期的修改,--更新一个字典key的值,另一个字典key也被更新
注意:python中用变量作为一个字典的key/value, 存储的是变量的内存地址。
# 测试两个字典使用相同的列表内容做值,值的内存地址是不同的,修改一个字典的某个key的值,另一个字典不受影响 webhook_bind_company = {} phones_bind_company_name = {} for i in range(3): company_str_list = ['智者四海'] if "url1" not in webhook_bind_company: webhook_bind_company["url1"] = ['智者四海'] else: webhook_bind_company["url1"].extend(['智者四海']) if "13263190002" not in phones_bind_company_name: phones_bind_company_name["1234567890"] = ['智者四海'] elif i == 3 : phones_bind_company_name["1234567890"].extend(['智者四海']) print("webhook_bind_company:", webhook_bind_company) print("phones_bind_company_name:", phones_bind_company_name) print("ID:", id(phones_bind_company_name["1234567890"])) # 内存地址不同 print("ID:", id(webhook_bind_company["url1"])) # 内存地址不同 # 输出: # webhook_bind_company: {'url1': ['智者四海']} # phones_bind_company_name: {'1234567890': ['智者四海']} # webhook_bind_company: {'url1': ['智者四海', '智者四海']} # phones_bind_company_name: {'1234567890': ['智者四海']} # webhook_bind_company: {'url1': ['智者四海', '智者四海', '智者四海']} # phones_bind_company_name: {'1234567890': ['智者四海']} # ID: 2031893501184 # ID: 2031893310848 print("分割线".center(30, "*")) webhook_bind_company = {} phones_bind_company_name = {} # 使用同一个变量作为两个字典的key的值,一个字典中key值被修改,则另一个字典中的也被修改了。 for i in range(3): company_str_list = ['智者四海'] # 循环第一次时被当做内存地址传入 if "url1" not in webhook_bind_company: webhook_bind_company["url1"] = company_str_list else: webhook_bind_company["url1"].extend(company_str_list) # 对key的原值直接更改 if "1234567890" not in phones_bind_company_name: phones_bind_company_name["1234567890"] = company_str_list # 第二个字典中的值也被更改, 因为指向同一个列表的内存地址。 elif i == 3 : phones_bind_company_name["1234567890"].extend(company_str_list) print("company_str_list: ", company_str_list,"ID:", id(company_str_list)) print("webhook_bind_company:", webhook_bind_company) print("phones_bind_company_name:", phones_bind_company_name) # 使用变量传递值,为内存地址,一个字典值修改,领个字典值同样被修改 print(" company_str_list ID:", id(company_str_list)) print("ID:", id(phones_bind_company_name["1234567890"])) # 内存地址相同 print("ID:", id(webhook_bind_company["url1"])) # 内存地址相同 # 输出: # *************分割线************** # company_str_list: ['智者四海'] ID: 1743997326528 # webhook_bind_company: {'url1': ['智者四海']} # phones_bind_company_name: {'1234567890': ['智者四海']} # company_str_list: ['智者四海'] ID: 1743997898048 # webhook_bind_company: {'url1': ['智者四海', '智者四海']} # phones_bind_company_name: {'1234567890': ['智者四海', '智者四海']} # company_str_list: ['智者四海'] ID: 1743997136192 # webhook_bind_company: {'url1': ['智者四海', '智者四海', '智者四海']} # phones_bind_company_name: {'1234567890': ['智者四海', '智者四海', '智者四海']} # company_str_list ID: 1743997136192 # ID: 1743997326528 # ID: 1743997326528
posted on 2023-08-19 23:53 zhangmingda 阅读(140) 评论(2) 编辑 收藏 举报