在Python中创建M x N的数组
在Python中创建M x N的数组 一般有三种方法:
- 列表乘法
dp = [[0] * n] * m
- for 循环
dp= [[0 for _ in range(n)] for _ in range(m )]
- 乘法+for循环
dp = [[0] * n for _ in range(m )]
但是,在使用列表乘法创建的时候会出现问题:
dp = [[0]*2]*2
print(dp) # [[0, 0], [0, 0]]
print(id(dp[0])) #3142462401856
print(id(dp[1])) #3142462401856
dp[0][1] = 2
print(dp) # [[0, 2], [0, 2]]
这说明在二维列表乘法的时候外层只是用了引用,而不是新开辟空间建立数组. 从地址上也可以看出来,dp[0]和dp[1]实际上指向了同一个对象。因此,当尝试修改dp[0]中的元素的时候,dp[1]中的对应元素会同时修改。问题在于外层的乘法实际上已经是引用型。
同理,如果一维列表乘法的时候用的就是引用类型的数据,也会出现一样的情况
class A():
def __init__(self,a=0,b=1):
self.a = a
self.b = b
def change(self,c):
self.a = c
return 1
def __repr__(self):
return "A:[{},{}]".format(self.a,self.b)
if __name__ == "__main__":
test = A(2,3)
print(test) # A:[2,3]
testlist = [test]*3
print(testlist) # [A:[2,3], A:[2,3], A:[2,3]]
test.change(5)
print(test) # A:[5,3]
print(testlist) # [A:[5,3], A:[5,3], A:[5,3]]
在Python中创建M x N的数组的更多相关文章
- python面试题之如何在Python中创建自己的包
Python中创建包是比较方便的,只需要在当前目录建立一个文件夹, 文件夹中包含一个__init__.py文件和若干个模块文件, 其中__init__.py可以是一个空文件,但还是建议将包中所有需要导 ...
- 在python中创建列表的最佳和/或最快方法
在python中,据我所知,至少有3到4种方法来创建和初始化给定大小的列表: 简单循环append: my_list = [] for i in range(50): my_list.append(0 ...
- python中的矩阵、多维数组----numpy
https://docs.scipy.org/doc/numpy-dev/user/quickstart.html (numpy官网一些教程) numpy教程:数组创建 python中的矩阵.多维数 ...
- Python中创建ndarrary的20中方法
本文完整示例:完整示例代码 本文介绍了基础的.常用的创建ndarrary的多种方法,附带示例代码. 一.通过ndarray创建 import numpy as np 1.1 一维数组 a = np.a ...
- 在Python中创建和使用类
编程只是 if : 为了少写重复的代码,有了循环 for/while: 但碰到很长的重复代码,可能用一个循环难以实现,所以出现了面向对象的思想: 类:就是你的循环主体 实例:就是对你的循环的一次调用 ...
- python中的矩阵、多维数组
2. 创建一般的多维数组 import numpy as np a = np.array([1,2,3], dtype=int) # 创建1*3维数组 array([1,2,3]) type(a ...
- 2.python中的矩阵、多维数组----numpy
最近在将一个算法由matlab转成python,初学python,很多地方还不熟悉,总体感觉就是上手容易,实际上很优雅地用python还是蛮难的.目前为止,觉得就算法仿真研究而言,还是matlab用得 ...
- Python中的矩阵、多维数组:Numpy
Numpy 是Python中科学计算的核心库.它提供一个高性能多维数据对象,以及操作这个对象的工具.部分功能如下: ndarray, 具有矢量算术运算和复杂广播能力的快速且节省空间的多维数组. 用于对 ...
- python中创建实例属性
虽然可以通过Person类创建出xiaoming.xiaohong等实例,但是这些实例看上除了地址不同外,没有什么其他不同.在现实世界中,区分xiaoming.xiaohong要依靠他们各自的名字.性 ...
随机推荐
- 最新 uni-app 免费教程
最新 uni-app 免费教程 uni-app 快速入门 steps 建议第一步,看完uni-app官网的首页介绍. 建议第二步,通过快速上手,亲身体验下uni-app. 建议第三步,看完<un ...
- 经济学,金融学:资产证券化 ABS
经济学,金融学:资产证券化 ABS ABS 资产支持证券 蚂蚁金服如何把30亿变成3000亿?资产证券化 前几天,花呗借呗的东家蚂蚁集团在上市前夕被监管部门叫停,因为这则新闻广大网民都听说了一个概念: ...
- array group by key javascript
array group by key javascript calendar Array.reduce https://developer.mozilla.org/en-US/docs/Web/Jav ...
- js in depth & prototype & __proto__
js in depth & prototype & proto 实例的 proto 与 父类的 prototype,同时指向 父类的构造函数: https://hackernoon.c ...
- lua调用dll导出的函数
参考手册 hello.dll #include "pch.h" #include "lua.hpp" #pragma comment(lib, "lu ...
- 2021-2-20:请你说说分布式系统 BASE 理论是什么?
BASE 理论是由 Dan Pritchett 在 ACM 上发表的一篇论文中提出的理论.是在 CAP 理论基础上提出的一种更实际的理论指导,和 PACELC 理论是有些相近的地方的. BASE 是指 ...
- SpringBoot整合Mybatis 使用generator自动生成实体类代码、Mapper代码、dao层代码
1.新建一个SpringBoot项目,并引入Mybatis和mybatis-generator相关的依赖. <dependency> <groupId>org.springfr ...
- PyTorch 自定义数据集
准备数据 准备 COCO128 数据集,其是 COCO train2017 前 128 个数据.按 YOLOv5 组织的目录: $ tree ~/datasets/coco128 -L 2 /home ...
- 字符串拼接出现null的问题
最近在开发的过程中遇到这样的问题,原因是在做一个需求的时候,要求将解密的号码和前缀进行拼接.一开始在这个拼接的过程中,没有考虑到数据校验的问题,因为有可能他的前缀或者其他需要拼接的字段在前端传递的过程 ...
- JUnit5学习之四:按条件执行
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...