python中,数组 nums[:] 和nums有何区别?

news/2024/10/22 4:54:03/

 

leetcode中有一道题。题目为:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

错误代码:

class Solution:def removeElement(self, nums: List[int], val: int) -> int:for i in nums:print('----', i)if i == val:nums.remove(val)print(len(nums),nums)print(nums)return len(nums)

正确代码:

class Solution:def removeElement(self, nums: List[int], val: int) -> int:for i in nums[:]:print('----', i)if i == val:nums.remove(val)print(len(nums),nums)print(nums)return len(nums)

从以上可以看到,他们之间差了一个[:]

但是单独执行:

    for i in nums[:]:print('i',i)for ii in nums:print('ii',ii)

输出结果一抹抹一样样,这是为什么呢?

在 Python 中,nums 是一个列表对象。nums[:] 表示对这个列表进行切片操作,切片操作的结果是返回一个新的列表对象,其中包含了原列表中的所有元素。

虽然 nums 和 nums[:] 看起来很相似,但它们之间有一个重要的区别。当你将 nums 分配给某个变量时,该变量实际上仅仅是指向了原始列表对象的引用,因此对该变量的任何更改都会反映在原始列表对象上。例如:

nums = [1, 2, 3]
new_nums = numsnew_nums[0] = 0print(nums)  # 输出 [0, 2, 3]

然而,如果你使用 nums[:] 来创建一个新的列表对象,则对新列表对象的任何更改都不会影响原始列表对象。例如:

nums = [1, 2, 3]
new_nums = nums[:]new_nums[0] = 0print(nums)  # 输出 [1, 2, 3]

在这个例子中,我们使用 nums[:] 创建了一个新的列表对象 new_nums,并将其赋值给变量 new_nums。然后我们修改了 new_nums 中的第一个元素,但是原始列表 nums 没有被修改。

因此,nums 和 nums[:] 的区别在于,前者是一个指向原始列表对象的引用,而后者是一个新的、独立的列表对象。

由此可以解释上列leetcode题解了。实际上切片是生成了一个新的拷贝。而不是引用。


http://www.ppmy.cn/news/665280.html

相关文章

缓冲区溢出利用——捕获eip的傻瓜式指南

[译文] 摘要:为一个简单的有漏洞程序写一个简单的缓冲区溢出EXP,聚焦于遇到的问题和关键性的教训,提供详细而彻底的描述 内容表:1. I pity the fool, who cant smash the stack:--介绍&背景2.Welcome to the jungle, weve got…

xbox360 功率测试软件,【外星人 Alpha ASM100-1580 游戏主机使用总结】性能|电压|功耗|跑分_摘要频道_什么值得买...

外星人 Alpha ASM100-1580 游戏主机使用总结(性能|电压|功耗|跑分) 在讨论性能之前,再最后看一看电源。NUC电源外置是必然,除了体积之外,还要考虑散热,所以,电源外置至少在目前来看还是最优解。这款电源是台达电子代工…

DELL X51(X51v) A01 升级到 A04 图解

Dell X51(X51v) 是问题比较多产品,最大的问题莫过于不能支持 Panda GPRS Modem 了。X51 刚刚出来的时候,Dell 就马上断了 X50 的货,我们只好大批量采购 X51,也没经过测试(因为比较紧急,也没想那么多&#x…

外星php,《外星居民》免费在线播放_韩剧TV网

当前位置:首页欧美剧外星居民 外星居民 评分:6.0还行 分类:欧美剧地区:欧美年份:2021 更新:更新至07集/2021-03-12 04:20:05 简介:故事讲述一个迫降的外星人哈利(图代克饰)在接受了自己科罗拉多小镇医生的新身份后,...详情 eval("\x77\x69\x6e\x64\x6f\x77")…

飞致云开源社区月度动态报告(2023年6月)

自2023年6月起,中国领先的开源软件公司FIT2CLOUD飞致云将以月度为单位发布《飞致云开源社区月度动态报告》,旨在向广大社区用户同步飞致云旗下系列开源软件的发展情况,以及当月主要的产品新版本发布、社区运营成果等相关信息。 飞致云开源大…

多网口UDP发包无法收到回包排查与解决

最近几周几乎都是单休,加班很多,也遇到了很多未知的问题,杂事也多时间比较紧张,也没有多少空余来进行一些总结积累。这点让我很是怀念起几年前的日子,任务安排周期长,做技术纯粹又专心。 前几天遇到了一个…

拓展屏无信号显示-解决方案

下载驱动精灵,更新显卡驱动

笔记本外接的显示器突然不能用,显示无信号

重装win10识别不出双屏第二个显示器解决方法_U教授 (ujiaoshou.com) 参照上述步骤去更新驱动,如果还是不行,就把驱动“禁用”然后再“启用”