有人可以解释为什么这两个不同的代码示例会给出不同的输出吗?我很困惑为什么第一个样本在所有月份都附加了“晴天”和“云”,这不是我想要的。我想要第二个样本的输出。但是,我想将变量“forecast”,而不是它的值分配给weatherReport [“months”] [month]。有没有办法以这种方式获得样本2的输出?
样本1:
test
样品1的输出:
weatherReport = {"months": {}}
forecast = []
months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
for month in months[1:]:
weatherReport["months"][month] = forecast
weatherReport["months"]["June"].append("sunny")
weatherReport["months"]["December"].append("cloudy")
print weatherReport
样本2:
{'months': {'February': ['sunny', 'cloudy'], 'October': ['sunny', 'cloudy'], 'March': ['sunny', 'cloudy'], 'August': ['sunny', 'cloudy'], 'May': ['sunny', 'cloudy'], 'December': ['sunny', 'cloudy'], 'June': ['sunny', 'cloudy'], 'September': ['sunny', 'cloudy'], 'April': ['sunny', 'cloudy'], 'July': ['sunny', 'cloudy'], 'November': ['sunny', 'cloudy']}}
样本2的输出:
weatherReport = {"months": {}}
forecast = []
months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"]
for month in months[1:]:
weatherReport["months"][month] = []
weatherReport["months"]["June"].append("sunny")
weatherReport["months"]["December"].append("cloudy")
print weatherReport
答案 0 :(得分:2)
在第二个代码中,您为每个月分配一个全新的独立列表。因此,当您稍后将值附加到这些列表时,只会附加到正确的列表中。
在第一个代码中,您为每个月分配相同的变量。在Python中,它意味着每个月都有对相同列表的引用。因此,当您向这些列表中的任何一个添加值时,实际上您将其添加到每个月指向的forecast
列表中。所以结果。
根本原因是列表是 mutable ,这意味着您可以修改其他对象指向的对象。您将无法使用非可变对象(如字符串)重现该内容。
答案 1 :(得分:1)
在示例1中,您将为dict中的所有值分配相同的引用;因此,当您更改该引用的值时,它将反映在字典中的所有值中。在第二个示例中,每个字典实例都有一个唯一的列表。