python - 引用单维列表的python异常行为中的列表

标签 python list

a = [0]*4
a[0]= 1
print(a)

输出是 [1,0,0,0] 而根据 Strange behavior of lists in python 中解释的列表行为,它应该是 [1,1,1,1]这表示 * 创建对对象的引用而不是值的副本。
请解释

最佳答案

是的,使用重复运算符,* , 创建对列表中对象的多个引用。然而,a[0] = 1 不修改这些对象 ,它修改列表。

如果您可以修改列表中的对象(在这种情况下您不能修改,因为 int 对象是不可变的),然后您确实修改了这些对象,那么您将看到相同的行为。

请注意,即使您使用 a[0] = <something>对于可变对象,它不会那样做:

>>> x = [[]]*3
>>> x
[[], [], []]
>>> x[0] = [1] # modify the list
>>> x
[[1], [], []]

您必须实际修改列表中的对象:
>>> x = [[]]*3
>>> x
[[], [], []]
>>> x[0].append(1) # modify the in the list
>>> x
[[1], [1], [1]]

您缺少的根本区别是修改列表本身与修改列表内的对象之间的区别。

另请注意,list对象没有维度。

关于python - 引用单维列表的python异常行为中的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59495840/

相关文章:

android - 我是否让 Kotlin 函数正确返回一个列表?

python - 从列表中的值查找字符串中文本的第一个实例

python - 通过 cron 从 bash 脚本内部运行 python 文件

python - 二分查找字典列表中第一次出现的位置

python - 解析json文件时出现错误

list - 在 Prolog 中反转列表

python - 将平面列表转换为python中的列表列表

python - Scrapy下载文件报错302

python - 显示 DjangoGooglePointFieldWidget Uncaught ReferenceError 的 django map 小部件控制台

list - 模拟 Length 函数以获取列表的长度