python中[[]] * (n)和[[] for _ in range(n)]的区别

news2024/11/30 2:39:16

1、现象

刷leetcode207的时候碰到一个坑,用[[]] * (n)初始化二维数组,逻辑是正确的,但是结果始终不对。

2、原因

最后定位是初始化语句使用错误导致的,我使用的是[[]] * (n),应该使用[[] for _ in range(n)]

3、解释

[[]] * (n)和[[] for _ in range(n)]打印结果完全一样,但是原理却不一样

[[]] * (n)表示复制子列表( 此处为[] ) n次,这些子列表指向或引用相同的对象,也就是内存地址一样,因此修改其中一个子列表元素,会同时影响其他子列表的值,如下面代码中的L1

[[] for _ in range(n)] 表示列表的子列表元素是每次for循环创建的新对象,这些子列表指向或引用不同的对象,内存地址当然也不一样,因此修改其中一个子列表元素,不会影响其他子列表的值,如下面代码中的L2

n = 2
L1 = [[]] * n
L2 = [[] for _ in range(n)]
print(f'L1:{L1}, L2:{L2}')
print(L2 == L2)   #值相等
print(id(L1[0]),id(L1[1])) # L1列表内的元素,地址相同
print(id(L2[0]),id(L2[1])) # L2列表内的元素,地址不同
L1[0].append(1)
L2[0].append(1)
print(f'L1:{L1}, L2:{L2}')

打印结果:

4、注意

L1 中的元素是列表,是可变对象,使用*n复制,不同元素才会指向同一个对象,但是如果L1中元素是不可变对象,比如int、string、float、tuple,使用*n复制的时候,不同元素也会指向同一个元素,但是修改时,由于是不可变对象,修改时会重新开辟一块内存,变量指向新地址,这样修改其中一个元素,不会影响其他元素

i = 2
L1 = [2] * i   # 列表元素为不可变对象 int
print(L1)
print(id(L1[0]),id(L1[1]))
L1[0] = 4
print(id(L1[0]),id(L1[1]))
print(L1)

打印结果为

5、其他

可变数据类型:列表list[ ]、字典dict{ }

不可变数据类型:整型int、字符串str' '、元组tuple()浮点数float

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1432170.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MagicVideo-V2:多阶段高保真视频生成框架

本项工作介绍了MagicVideo-V2,将文本到图像模型、视频运动生成器、参考图像embedding模块和帧内插模块集成到端到端的视频生成流程中。由于这些架构设计的好处,MagicVideo-V2能够生成具有极高保真度和流畅度的美观高分辨率视频。通过大规模用户评估&…

Android学习之路(28) 进程保活组件的封装

前言 远古时代,出现过很多黑科技,比如MarsDaemon,使用双进程守护的方式进行保活,在当时可谓风光无限,可惜在8.0时代到来就被废弃了。 又比如后面出现的1像素Activity的保活方式,说他流氓一点不过分&#…

Linux 驱动开发基础知识——内核对设备树的处理与使用(十)

个人名片: 🦁作者简介:学生 🐯个人主页:妄北y 🐧个人QQ:2061314755 🐻个人邮箱:2061314755qq.com 🦉个人WeChat:Vir2021GKBS 🐼本文由…

344. Reverse String(反转字符串)

题目描述 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 问题分析 以中间字符为轴,将两边的字符对换…

【Vue】组件间通信的7种方法(全)

目录 组件之前的通信方法 1. props/$emit 2.parent/children 3.ref 4.v-model 5.sync 6.attrs,attrs,attrs,listeners 7.provide/inject 7.eventBus 组件之前的通信方法 1. props/$emit 父传子 props 这个只能够接收父组件传来的数据 不能进行修改 可以静态传递 也可…

day35 柠檬水找零 根据身高重建队列 用最少数量的箭引爆气球

题目1:860 柠檬水找零 题目链接:860 柠檬水找零 题意 一杯柠檬水5美元,每位顾客只买一杯柠檬水,支付5美玉,10美元,20美元,必须正确找零 开始时并没有零钱 若可以正确找零,则返回…

操作系统透视:从历史沿革到现代应用,剖析Linux与网站服务架构

目录 操作系统 windows macos Linux 服务器搭建网站 关于解释器的流程 curl -I命令 名词解释 dos bash/terminal,(终端) nginx/apache(Linux平台下的) iis(Windows平台下的) GUI(图形化管理接口&#xff…

python coding with ChatGPT 打卡第16天| 二叉树:完全二叉树、平衡二叉树、二叉树的所有路径、左叶子之和

相关推荐 python coding with ChatGPT 打卡第12天| 二叉树:理论基础 python coding with ChatGPT 打卡第13天| 二叉树的深度优先遍历 python coding with ChatGPT 打卡第14天| 二叉树的广度优先遍历 python coding with ChatGPT 打卡第15天| 二叉树:翻转…

机器翻译后的美赛论文怎么润色

美赛论文的语言表达一直是组委会看重的点,清晰的思路和地道的语言在评审中是重要的加分项。 今天我们就来讲讲美赛论文的语言问题。 我相信有相当一部分队伍在打美赛的时候,出于效率的考量,都会选择先写中文论文,再机翻成英文。 …

海外盲盒系统搭建,加快盲盒企业出海进程

盲盒作为我国的潮流消费模式,融入了潮流、艺术、动漫等多种元素,吸引了使得越来越多的“Z世代”玩家进入到盲盒市场,促进了市场的迅速扩大,同时也吸引了众多企业入场,“盲盒经济”迅速走红。 盲盒走向海外市场 随着盲…

安装配置Oracle 11g 、PLSQL及使用Navicat远程连接Oracle

目录 一、下载 二、安装 1.执行安装程序 2.配置安全更新 3.安装选项 4.系统类 5.网络安装选项 6.选择安装类型 7.选择产品语言 8.选择数据库版本 9.指定安装位置 10.选择配置类型 ​编辑11.指定数据库标识符 12.指定配置选项 13.电子邮箱 14.指定数据库存储…

寒假思维训练day17 C. Equal Frequencies

不知不觉已经过了差不多一个月了,坚持一件事情还是有点收获的,今天更新一道1600的构造。 寒假训练计划day17 摘要: Part1 题意 Part2 题解 (有数学推导,latex形式) Part3 代码 (C版本,有详细注释) Part4 我对构造题…

Linux Zip解压缩命令

Zip 用法 $ zip [-选项] [-b 路径] [-t 日期] [-n 后缀名] [压缩文件列表] [-xi 列表] 默认操作是添加或替换压缩文件列表中的压缩文件条目,压缩文件列表可以包括特殊名称 -,压缩标准输入数据 Zip 是一个创建和管理 zip 文件的压缩工具 Unzip 是一个用…

使用 Python 进行自然语言处理第 3 部分:使用 Python 进行文本预处理

一、说明 文本预处理涉及许多将文本转换为干净格式的任务,以供进一步处理或与机器学习模型一起使用。预处理文本所需的具体步骤取决于具体数据和您手头的自然语言处理任务。 常见的预处理任务包括: 文本规范化——将文本转换为标准表示形式,…

初识C语言·编译与链接

1 翻译环境和运行环境 C语言标准ANSI C 实现C语言代码的时候 一般需要经过两种环境,一是翻译环境,二是运行环境,计算机能识别的是二进制的指令,人写完代码后通过翻译环境,使代码变成计算机能读懂的可执行的机器指令&a…

伦敦金重点知识:控制亏损的方法

在很多人的预期中,伦敦金重点知识肯定是那些涉及市场分析的方法,那些方法能帮助投资者一把抓住交易机会,在市场中建立优势。但笔者要说的是,那些方法固然重要,但笔者认为还有更加重要的,那就是控制亏损。控…

大模型增量预训练新技巧:解决灾难性遗忘

大家好,目前不少开源模型在通用领域具有不错的效果,但由于缺乏领域数据,往往在一些垂直领域中表现不理想,这时就需要增量预训练和微调等方法来提高模型的领域能力。 但在领域数据增量预训练或微调时,很容易出现灾难性…

LLM大模型

LLM 学习链接 : 大语言模型 LLM行业背景和市场需求 大模型的涌现能力 大模型核心前沿 大模型应用范式和职业规划

大数据 - Spark系列《四》- Spark分布式运行原理

Spark系列文章: 大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客 大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客 大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客 目录 🍠…

200行C++代码写一个网络调试助手(TCP服务端TCP客户端)

前言 今天分享一个200行C代码写成的QT网络调试助手。 可以先看看效果 。 因为我不喜欢用QT Designer,因此我用的组件都是使用代码布局的,所以需要设计一下布局。 界面是参考的之前写的串口助手,就是把里面的逻辑改了改,因此外观…