Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >python初始化二维数组的两种方式及区别

python初始化二维数组的两种方式及区别

原创
作者头像
qnner
发布于 2022-08-09 15:40:07
发布于 2022-08-09 15:40:07
65700
代码可运行
举报
文章被收录于专栏:qnner的文章qnner的文章
运行总次数:0
代码可运行

最近写代码的时候,发现一个比较好玩的事情。

背景是这样的:

初始化一个a*b二维数组的二维数组

第一种写法:

我最开始的写法是这样的:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr = [[0]*3] * 3

在尝试给其中某个元素赋值的时候,发现同一列的其他元素也会变成一样的值,大概就像这样:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(arr)
print("-------")
arr[1][1] = 3
print(arr)

""" 输出:
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
-------
[[0, 3, 0], [0, 3, 0], [0, 3, 0]]
"""

是不是很神奇?

尝试定位,猜测这个二维数组的每个子数组引用了同一个对象。

打印id看下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
print(id(arr[0]))
print(id(arr[1]))
print(id(arr[2]))

""" 输出:
4303451584
4303451584
4303451584
"""

果然,他们的内存地址都是一样的

第二种写法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr = [[0]*3 for i in range(3)]

print(arr)
print("-------")
arr[1][1] = 3
print(arr)

print(id(arr[0]))
print(id(arr[1]))
print(id(arr[2]))

""" 输出:
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
-------
[[0, 0, 0], [0, 3, 0], [0, 0, 0]]
4378010048
4378009984
4378009856
"""

可以看见,尝试修改[1][1]的值,[0][1], [2][1]的值并没有被改变,且每个子数组的内存地址不一样

两种写法的对象是否相等?

尝试判断下两种写法生成的对象,直接比较是否相等

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
arr1 = [[0]*3 for i in range(3)]
arr2 = [[0]*3] * 3

print("原始状态是否一致: ", arr1 == arr2)

arr1[1][1] = 1
arr2[1][1] = 1
print(arr1 == arr2)
print("修改[1][1]后是否一致: ", arr1 == arr2)


""" 输出:
原始状态是否一致:  True
False
修改[1][1]后是否一致:  False
"""

可以看见,在未修改值之前,两个数组比较是相等的;

尝试修改[1][1]后,两个数组再次比较变得不再相等。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
二维数组的使用
package com.java; /* * 二维数组的使用 * 1.理解: * 对于二维数组的理解,我们可看成是以为数组又作为另外一个一维数组元素的存在。 * 从数组底层的运行机制来看,没有多维数组 * 2.二维数组 * (1)二维数组的声明和初始化 * (2)如何调用数组的指定位置的元素 * (3)如何获取数组的长度 * (4)如何遍历数组 * (5)数组元素的默认初始化值 * (6)数组的内存解析 */ public class ArrayTest2 { pub
用户8639654
2021/07/26
9060
java二维数组三种初始化方法(实例)[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142042.html原文链接:https://javaforall.cn
全栈程序员站长
2022/09/01
1.1K0
正确创建Python二维数组
奇怪的事情发生了,明明我只改变了arr[0][0],我希望的是第一行的第一个元素更改为1,但每行的第一个元素更改为1。
宇宙之一粟
2020/10/26
3K0
正确创建Python二维数组
一维数组与二维数组———详细解读及一些注意事项
这里注意一点,在C99标准里有变长数组的概念,所谓变长数组并不是指数组会变长,而是指用整型变量或表达式声明或定义的数组。如下所示:
诺诺的包包
2023/02/17
5950
一维数组与二维数组———详细解读及一些注意事项
认识一维数组与二维数组
本章讲述暂时只讨论一维数组和二维数组;多维数组(二维及二位以上),数组作为函数参数等章节不参与此次讨论,但会在能力范围内讲的明白。感谢观看(本人为技术萌新,只讨论在实践过程中的心得,如有问题请及时指出)
用户11367452
2024/11/21
3040
认识一维数组与二维数组
如何连接两个二维数字NumPy数组?
Python 是一种通用且功能强大的编程语言,广泛用于科学计算、数据分析和机器学习。使Python对这些领域如此有用的关键库之一是NumPy。NumPy提供了强大的工具来处理数组,这对于许多科学计算任务至关重要。在本文中,我们将探讨如何使用 Python 连接两个二维 NumPy 数组。
很酷的站长
2023/08/11
4100
如何连接两个二维数字NumPy数组?
二维数组与稀疏矩阵的互转
应用: 五子棋棋盘的棋子的存档问题 思路构图: xishu.jpg SparseArray.java 运行结果 原始数组: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
暖月寒星
2020/03/11
8850
Java基础知识及细节之二维数组
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
小炜同学
2022/08/20
2650
JS二维数组 8
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <script> //什么是二维的数组,数组中的每一个下标都包括了一个数组,这整个叫做二维数组。 //定义二维数组: let arr=[[1,2],[3,4]]; let arr1=arr[0]; console.log(arr1); let ele=arr[0][1];
贵哥的编程之路
2020/10/28
2.2K0
Java IDEA Debug&进制&二维数组
是供程序员使用的程序调试工具,它可以用于查看程序的执行流程,也可以用于追踪程序执行过程来调试程序。
Lansonli
2021/10/09
7710
【愚公系列】2021年12月 Java教学课程 21-二维数组
​ 已知两个整数变量a = 10,b = 20,使用程序实现这两个变量的数据交换 ​ 最终输出a = 20,b = 10;
愚公搬代码
2021/12/29
2890
C语言从青铜到王者——数组详解【一维数组、二维数组、字符数组】
所谓数组,是指将那些具有相同类型的、数量有限的若干个变量通过有序的方法组织起来的一种便于使用的形式。数组属于一种构造类型,其中的变量被称为数组的元素。数组元素的类型可以是基本数据类型,也可以是特殊类型和构造类型。
C语言中文社区
2022/05/31
1.1K0
C语言从青铜到王者——数组详解【一维数组、二维数组、字符数组】
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
走在努力路上的自己
2024/01/26
6930
指针详解(二级指针、指针数组和数组指针、字符指针、二维数组传参、函数指针变量)(二)
C语言从青铜到王者——数组详解【一维数组、二维数组、字符数组】
所谓数组,是指将那些具有相同类型的、数量有限的若干个变量通过有序的方法组织起来的一种便于使用的形式。数组属于一种构造类型,其中的变量被称为数组的元素。数组元素的类型可以是基本数据类型,也可以是特殊类型和构造类型。
C语言中文社区
2021/05/13
1.6K0
C语言数组基础知识详解---一维数组,二维数组,数组访问,二分查找
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。 type 指定的是数组中存放数据的类型,可以是:char、short、int、float 等,也可以是自定义的类型。 arr_name 指的是数组名的名字,这个名字根据实际情况,起的有意义就行。 []中的常量值是用来指定数组的大小的,这个数组的大小是根据实际的需求指定就行。
fhvyxyci
2024/09/24
3290
C语言数组基础知识详解---一维数组,二维数组,数组访问,二分查找
Python 数组操作_python中数组的表示形式
在python中本身有着列表等数据结构,但是列表只是一种数据的存储容器,不具备任何计算能力。
全栈程序员站长
2022/09/22
3.1K0
Python 数组操作_python中数组的表示形式
【C语言】二维数组
    前⾯学习的数组被称为⼀维数组,数组的元素都是内置类型的,如果我们把⼀维数组做为数组的元素,这时候就是⼆维数组,⼆维数组作为数组元素的数组被称为三维数组,⼆维数组以上的数组统称为多维数组
TANGLONG
2024/10/15
2100
【C语言】二维数组
PHP二维数组取差集
使用 array_diff() 获取差集,返回空数组。这个函数只能用于一维数组,不能用于二维数组。
句小芒
2022/12/29
4.9K0
【C语言数组】创建、初始化、以及使用
存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的⼤⼩和数组的元素类型。
学习起来吧
2024/02/29
5170
【C语言数组】创建、初始化、以及使用
C语言进阶指南(11)(指针数组与二维数组)
指针变量是一个存放地址的变量,在C语言中,每个变量都会有一个地址值。所以指针变量也有一个地址。
代码小豪
2024/06/20
1611
推荐阅读
相关推荐
二维数组的使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验