2024-3-7 python创建二维列表谨防连用两个*,列表的增量赋值(+=或*=)与元组的增量赋值的差异

本文主要是介绍2024-3-7 python创建二维列表谨防连用两个*,列表的增量赋值(+=或*=)与元组的增量赋值的差异,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

#1、python创建二维列表谨防连用两个*
要创建1个二维的列表,不要连用两个*号,否则会出现改1个值,其他位置的值跟着变化的问题。
下面两种创建二维列表的方法,要用第一种,不要用第二种

>>> board1 = [['_']*3 for i in range(3)]
>>> board2 = [['_'] * 3 ] * 3

将board1[0][0] 改为‘a’,其他元素的值不会发生变化。

>>> board1[0][0] = 'a'
>>> board1
[['a', '_', '_'], ['_', '_', '_'], ['_', '_', '_']]

而将board2[0][0]改为’a’,其他元素的值有的会发生变化。

>>> board2[0][0] = 'a'
>>> board2
[['a', '_', '_'], ['a', '_', '_'], ['a', '_', '_']]

#2、列表的增量赋值(+=或*=)与元组的增量赋值的差异
列表实现了__iadd__方法,因此它的增量赋值,是真实的增量赋值,即把新列表添加在老列表之后,变量的引用地址(即内存中的位置)并没有变化。
而元组没有实现__iadd__方法,在python底层,实际上执行的是__add__方法,把老元组和新元组相加,然后组成一个新元组,变量的引用地址(即内存中的位置)会发生变化。
因此,对不可变序列进行重复拼接操作的话,效率会很低,因为每次都有一个新对象, 而解释器需要把原来对象中的元素先复制到新的对象里,然后再追加新的元素。

>>> s = [1,2,3]
>>> id(s)
2644922360520
>>> s*=2
>>> s
[1, 2, 3, 1, 2, 3]
>>> id(s)
2644922360520
>>> t = (1,2,3)
>>> id(t)
2644925786152
>>> t*=2
>>> t
(1, 2, 3, 1, 2, 3)
>>> id(t)
2644925583080

这篇关于2024-3-7 python创建二维列表谨防连用两个*,列表的增量赋值(+=或*=)与元组的增量赋值的差异的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/785605

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

poj2576(二维背包)

题意:n个人分成两组,两组人数只差小于1 , 并且体重只差最小 对于人数要求恰好装满,对于体重要求尽量多,一开始没做出来,看了下解题,按照自己的感觉写,然后a了 状态转移方程:dp[i][j] = max(dp[i][j],dp[i-1][j-c[k]]+c[k]);其中i表示人数,j表示背包容量,k表示输入的体重的 代码如下: #include<iostream>#include<

hdu2159(二维背包)

这是我的第一道二维背包题,没想到自己一下子就A了,但是代码写的比较乱,下面的代码是我有重新修改的 状态转移:dp[i][j] = max(dp[i][j], dp[i-1][j-c[z]]+v[z]); 其中dp[i][j]表示,打了i个怪物,消耗j的耐力值,所得到的最大经验值 代码如下: #include<iostream>#include<algorithm>#include<

2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题

题库来源:安全生产模拟考试一点通公众号小程序 2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题是由安全生产模拟考试一点通提供,流动式起重机司机证模拟考试题库是根据流动式起重机司机最新版教材,流动式起重机司机大纲整理而成(含2024年流动式起重机司机证模拟考试题库及流动式起重机司机理论考试试题参考答案和部分工种参考解析),掌握本资料和学校方法,考试容易。流动式起重机司机考试技

【专题】2024飞行汽车技术全景报告合集PDF分享(附原数据表)

原文链接: https://tecdat.cn/?p=37628 6月16日,小鹏汇天旅航者X2在北京大兴国际机场临空经济区完成首飞,这也是小鹏汇天的产品在京津冀地区进行的首次飞行。小鹏汇天方面还表示,公司准备量产,并计划今年四季度开启预售小鹏汇天分体式飞行汽车,探索分体式飞行汽车城际通勤。阅读原文,获取专题报告合集全文,解锁文末271份飞行汽车相关行业研究报告。 据悉,业内人士对飞行汽车行业

高效录音转文字:2024年四大工具精选!

在快节奏的工作生活中,能够快速将录音转换成文字是一项非常实用的能力。特别是在需要记录会议纪要、讲座内容或者是采访素材的时候,一款优秀的在线录音转文字工具能派上大用场。以下推荐几个好用的录音转文字工具! 365在线转文字 直达链接:https://www.pdf365.cn/ 365在线转文字是一款提供在线录音转文字服务的工具,它以其高效、便捷的特点受到用户的青睐。用户无需下载安装任何软件,只

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学