python 中嵌套列表的意外行为

2023-12-12

我有一个名为的嵌套列表basic我想更改其中一项。我假设了以下行为:

expected = [ [9],[0] ]
unexpected = [ [9],[9] ]
basic = [ [0],[0] ]
basic[0][0] = 9
print(basic == expected) # this is true

然而,稍加修改就会产生令人惊讶的输出:

l = [0]
modified = [ l, l ]
modified[0][0] = 9
print(modified == expected) # this is false
print(modified == unexpected) # this is true

如果您的列表是用第二种方式定义的,则分配会将整列设置为 9。

这是设计使然吗?如果是这样,为什么?我在文档中找不到任何相关内容。


在你的第一个例子中:

basic = [ [0],[0] ]

您创建了一个包含两个不同列表对象的列表对象。您可以通过以下方式看到它们是不同的对象id()或身份:

assert id(basic[0]) != id(basic[1])

assert basic[0] is not basic[1]

在你的第二个例子中:

l = [0]
modified = [ l, l ]

您已将同一个列表对象放入另一个列表两次。两个列表索引都引用同一个对象:

assert id(basic[0]) == id(basic[1])

assert basic[0] is basic[1]

所以,是的。这就是变量(以及它们指向的对象)在 Python 中的工作方式。

为了获得预期的行为,您需要创建单独的列表对象:

modified = [ l.copy(), l.copy() ]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 中嵌套列表的意外行为 的相关文章

随机推荐

  • 请求标头中的 JWT 与接收 .Net Core API 时不一样

    当我从 Angular 应用程序向 Net Core 2 API 发出请求时 JWT 与请求标头中发送的 JWT 不同 启动 cs public class Startup public Startup IHostingEnvironmen
  • 从字符串中分割特殊字符和字母

    我有一个字符串值 我包含字母 特殊字符 数字和空格的组合 但我只想检索数字 my code Dim str1 As String 123456habAB Dim str2 As String Regex Replace str1 gt
  • 双截断输出的 7 个字符

    double fat 0 2654654645486684646846865584656566554566556564654654899866223625564668186456564564664564 cout lt
  • 无法删除被授予连接数据库的角色

    我正在使用 PostgreSQL 10 4 我发现了一个奇怪的行为 如果我们创建一个角色并将其授予CONNECT数据库 CREATE ROLE dummy GRANT CONNECT ON DATABASE test TO dummy 那么
  • 引用方法内的对象时出现问题

    internal class Program public class Creature public int health public int damage public int coins public static void Hit
  • 如何将现有的 iPhone 应用程序移植到 iPad

    我有一个 iPhone 应用程序 现在我想将该应用程序转换为可在所有 iPhone iPod iPad 设备上运行的通用应用程序 那么 从哪里开始 我需要做哪些事情呢 任何帮助 链接 示例应用程序 任何东西 都将受到高度赞赏 提前致谢 我最
  • iPhone OS 应用程序的可用内存

    是否有函数或常量定义 iPhone OS 中应用程序的可用内存量 我正在寻找一种独立于设备 iPod touch iPhone iPad 的方式来了解应用程序还剩多少内存 该函数将返回可用内存 以字节为单位 import
  • 如何定义二维数组?

    我想定义一个没有初始化长度的二维数组 如下所示 Matrix 但这给出了一个错误 IndexError 列表索引超出范围 从技术上讲 您正在尝试为未初始化的数组建立索引 在添加项目之前 您必须首先使用列表初始化外部列表 Python 称之为
  • 符号函数矩阵

    我想在 Matlab 中定义一个符号函数 而不是变量 矩阵 在工作区中 我希望它成为大小为 N M 的类 symfun 的元素 其中N and M是正整数 你不能创建一个矩阵symfun类元素 可能出于同样的原因无法创建函数句柄矩阵 但您可
  • 如何在 PHP 中发送 HTTP 请求并检索响应(通过标头微调)?

    我必须向 URL 发送 HTTP 请求并检索响应和标头 我不仅对页面内容感兴趣 而且对所有标题也感兴趣 最佳解决方案是什么 插座 PEAR 库不可访问 PHP 配置不可编辑 你应该使用curl 文档中的快速示例
  • 如何在与主程序不同的线程中编写套接字服务器(使用 gevent)?

    我正在开发一个 Flask gevent WSGIserver Web 服务器 它需要使用 XML 通过两个套接字与硬件设备进行通信 在后台 一个套接字由客户端 我的应用程序 启动 我可以向设备发送 XML 命令 设备在不同的端口上应答并发
  • Objective-C / C 从 SecKeyRef 中提取私钥(模数)

    我需要一种干净的方法来提取我的服务器公钥并将其与本地数据进行比较 以防止将来密钥过期 更新 但我似乎无法获取 256 位密钥或将其表示为有用的数据为了比较 这是我到目前为止所拥有的 BOOL trustCertFromChallenge N
  • 提升消费者进程中的共享内存和同步队列问题/崩溃

    我正在尝试从子进程消耗 C 中的同步队列 我在 C 中使用这个同步队列 http www internetmosquito com 2011 04 making thread safe queue in c i html 我修改了队列以在b
  • Selenium webdriver 在尝试通过 ANT 运行时抛出异常

    我正在通过 Eclipse 使用 selenium 运行我的 UI 自动化测试用例 它运行良好 没有任何问题 当我在 Eclipse 中执行此操作时 会启动浏览器 执行测试用例 更新结果 然而 当我尝试通过 ANT 运行它时 它开始给我带来
  • Python字典复制方法

    我对字典复制方法有疑问 例如 假设我有 gt gt d pears 200 apples 400 oranges 500 bananas 300 gt gt copy dict d copy 现在 如果我检查 d 和 copy dict 的
  • 如何使用 css 在同一位置显示 2 个元素?

    div ul class social icon li a href class social facebook i class fa fa facebook i i class fa fa facebook ff i a li ul di
  • 数组动态时的最小查询范围

    我有一个大小为 1 的数组 A 0 索引 我想找到数组 A 中索引 k1 k1 gt 0 和 A size 1 即最后一个元素 之间的最小值 然后我会在数组末尾插入值 给定范围内的最小元素 一些 随机 常量 然后我有另一个查询来查找索引 k
  • 带变量的 SQL 查询

    我正在为学校做 PAT 我正在执行以下操作 我该如何纠正它 我想发送一个已输入的电子邮件地址 name ID 数字 出生日期 gender town一切都是字符串我的声明是 Adoquery1 sql text insert into be
  • Accepts_nested_attributes_for 部分的 AJAX 更新

    我当前的工作环境是Rails2 3 8 我的公司没有迁移到 Rails 3 的原因有很多 我正在尝试通过 AJAX 调用更新多模型表单的元素 这个想法是根据用户如何选择或填写其他字段来替换某些下拉列表 我之前曾设法通过使用基于非表单的部分来
  • python 中嵌套列表的意外行为

    我有一个名为的嵌套列表basic我想更改其中一项 我假设了以下行为 expected 9 0 unexpected 9 9 basic 0 0 basic 0 0 9 print basic expected this is true 然而