首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >python- list( [0,0] )与[0,0]有什么不同?

python- list( [0,0] )与[0,0]有什么不同?
EN

Stack Overflow用户
提问于 2015-05-28 19:17:49
回答 5查看 10.9K关注 0票数 2

我遇到了一个问题,如这个link所描述的。在使用我输入的dict理解时

代码语言:javascript
运行
复制
keys = [x for x in range(21)]
value = [0,0]
dict1 = {key: value for key in keys}

而不是:

代码语言:javascript
运行
复制
keys = [x for x in range(21)]
value = [0,0]
dict1 = {key: list(value) for key in keys}

在前一种情况下,问题仍然存在。所有键值指向同一个列表。这一切为什么要发生?本质上,我不明白的是list(0,0)如何不将列表创建为[0,0]?

编辑:我理解列表(Arg)只需要一个参数。但是,在列表中运行列表意味着什么呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-05-28 19:24:36

假设你有:

代码语言:javascript
运行
复制
a = [0, 0]
b = list([0, 0])

ab都是包含相同值的列表。但它们都是list的独特实例。

现在,如果你这样做:

代码语言:javascript
运行
复制
c = a
d = b

c指向a的同一个实例,d指向b,所以如果修改c的值,它也会反映在a中( db也是一样)。

然而,如果你这样做了:

代码语言:javascript
运行
复制
c = list(a)

您基本上是在创建a的浅表副本。这意味着,您创建了一个新的列表c,其中包含与a相同的值。因此,c的任何突变都不会影响a,因为它现在是唯一的list实例。

但是要小心,如果您的列表包含可变对象,它们仍然可以通过复制的列表进行变异。使用copy.deepcopy确保将所有对象复制为新对象。

票数 2
EN

Stack Overflow用户

发布于 2015-05-28 19:34:21

关于你的第二个问题,“本质上,我不明白的是list(0,0)如何不创建一个[0,0]列表?”

list()函数的工作方式是,它接受某种类型的容器,特别是一个可迭代的容器作为参数,并对此进行迭代,将容器中的每个元素放入一个新列表中。

例如,string是一个可迭代的元素,每个元素都是一个字符:

代码语言:javascript
运行
复制
>>> list('spam')
['s', 'p', 'a', 'm']

整数的tuple也是可迭代的:

代码语言:javascript
运行
复制
>>> list((1, 2, 3, 4))
[1, 2, 3, 4]

当然,列表本身是可迭代的,因此在现有的list()上运行list只会生成一个具有相同内容的新list

代码语言:javascript
运行
复制
>>> list(['oranges','spam',22.3])
['oranges', 'spam', 22.3]

不能做的是将一个整数传递给list(),因为整数是不可迭代的:

代码语言:javascript
运行
复制
>>> list(42)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable
票数 1
EN

Stack Overflow用户

发布于 2015-05-28 19:20:07

您正在使用list([0, 0])创建一个新列表,而不是一次又一次使用相同的列表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30515300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档