python-3.x - 如何使两个列表在python3中不共享它们的值
问题描述
在下面运行此代码后,
a = ['x', 'y', 'z']
b = a
c = a
t = 'A'
b[0] = t + c[0]
b 是['Ax', 'y', 'z']
,c 也是['Ax', 'y', 'z']
如何使两个列表不共享它们的值?
解决方案
您需要复制 a,否则您只是说 b 指向与 a 相同的对象,并且与 c 相同。你可以通过两种方式做到这一点
b=a.copy
c=list(a)
编辑:为您提供更多细节。当您使用等号将变量分配给 python 中的对象时,就像在带有变量名称的对象上粘贴便利贴一样。您创建了一个列表对象并将名称“a”粘贴到它上面。然后,您将名称“b”和“c”粘贴到同一个对象上。在这种情况下,基本上只有一个列表对象,它只有三个名称。该copy
方法创建与第一个对象相同的第二个对象。该list
函数返回一个新列表。如果你给它一个列表作为输入,它本质上只是另一种复制方式。
值得注意的是,如果列表包含其他对象(例如列表列表),则不会复制这些对象。为此,您应该使用deepcopy
.
推荐阅读
- kubernetes - k8s:将 YAML 转换为 JSON 时出错:yaml:第 33 行:找到无法启动任何令牌的字符
- php - 如何只允许 PHP 从我的服务器下载图像?
- node.js - 我不明白为什么在运行 docker 映像的容器时会出现此错误
- bash - 如何在文件中字符串的倒数第二个实例下方获取行
- google-cloud-platform - SignalR websockets 仅适用于第一次请求 Google Cloud Compute Engine
- python - Python Selenium Chrome 驱动程序负载
- azure - 尝试从保存的磁盘创建 VM 时未找到磁盘错误
- c# - 只有在检查复选框时,如何才能进行所需的文件上传(ASP .NET)?
- css - 将 IconButton 与一行中的文本对齐
- python - 无法使用 slack SocketModeHandler 从 Python 中的 slack 读取通道消息