首页 > 解决方案 > Python。如果我们从列表中获取 list() 函数会发生什么

问题描述

我有一个代码:

keys = {'a','e','i','o','u'}
value = [1]
vowels = { key : list(value) for key in keys }
print(vowels)
value.append(2)
print(vowels)

这段代码的结果:

{'a':[1],'e':[1],'i':[1],'o':[1],'u':[1]}
{'a':[1],'e':[1],'i':[1],'o':[1],'u':[1]}

以下代码:

keys = {'a','e','i','o','u'}
value = [1]
vowels = { key : value for key in keys }
print(vowels)
value.append(2)
print(vowels)

给了我另一个结果:

{'a':[1],'e':[1],'i':[1],'o':[1],'u':[1]}
{'a':[1,2],'e':[1,2],'i':[1,2],'o':[1,2],'u':[1,2]}

value如果两者list(value)都给出相同的列表对象,为什么会发生这种情况?

标签: pythonlistdictionary

解决方案


该代码list(value)创建了一个内容为 的列表value,因此如果您value在之后修改,则没有效果。

value = [1] ---> a list instance
{
 'u': [1], ----> a list instance copied from value
 'a': [1], ----> a list instance copied from value
 'e': [1], ----> a list instance copied from value
 'i': [1], ----> a list instance copied from value
 'o': [1]  ----> a list instance copied from value
 }

但是在vowels = {key: value for key in keys}您将列表的唯一实例设置value为每个键的值时,所有都指的是唯一列表[1],因此您修改它,您可以在字典中看到它,因为列表正在使用

value = [1,2] ---> a list instance
{                  ^
 'u': [1, 2], -----|    refers to value object
 'a': [1, 2], -----|    refers to value object
 'e': [1, 2], -----|    refers to value object
 'i': [1, 2], -----|    refers to value object
 'o': [1, 2]  -----|    refers to value object
}

推荐阅读