Python 的深拷贝和浅拷贝

直接赋值: 其实就是对象的引用(别名)。
浅拷贝(copy): 拷贝父对象,不会拷贝对象的内部的子对象。
深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

import copy
a = [1,2,3,[4,5,6]]
b = a                 # 浅拷贝: 引用对象
c = a.copy()          # 浅拷贝:深拷贝父对象(一级目录),子对象(二级目录)不拷贝,还是引用
d = copy.deepcopy(a)  # 深拷贝,包含对象里面的自对象的拷贝,所以原始对象的改变不会造成深拷贝里任何子元素的改变a.append('AA')
a[3].append('BB')print("a:", a)
print("b:", b)
print("c:", c)
print("d:", d)

python中二维数组初始化的问题

[[0]*n]*n和[[0]*n for i in range(n)]的区别

N = 6
a = [[0]*N]*N
s = [[0]*N for i in range(N)]
a[0][0] = 1
s[0][0] = 1
print(a)
print(s)# 结果
a = [[1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0], [1, 0, 0, 0, 0, 0]]
s = [[1, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0, 0, 0]]

[ 0 ] * n 是浅拷贝, 也就是把一个列表重复了 n 次,是 = 号复制(注意不是浅拷贝,= 与浅拷贝的list id是不同的);[[0]*n]*m 这种方式是直接将 [0]*n 复制了m遍
[0 for _ in range(n)] 才是创建,深拷贝

二维数组,创建一个3*4的矩阵,元素全为0,修改(0,2)个元素的值为3,则提供三种方法如下:

m,n = 3,4
dp1 = [[0] * n ] * m
dp2 = [[0 for _ in range(n) ] for _ in range(m)]
dp3 = [[0] * n for _ in range(m)]
dp1[0][2] = 3
dp2[0][2] = 3
dp3[0][2] = 3
print('dp1:',dp1)
print('dp2:',dp2)
print('dp2:',dp3)

结果为:

dp1: [[0, 0, 3, 0], [0, 0, 3, 0], [0, 0, 3, 0]]
dp2: [[0, 0, 3, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
dp2: [[0, 0, 3, 0], [0, 0, 0, 0], [0, 0, 0, 0]]

【从零学Python】深拷贝和浅拷贝、二维数组初始化相关推荐

  1. [Python] 二维数组初始化实践

    背景 参考博客Python二维数组初始化问题_NobiShinnosuke的博客-CSDN博客_python 二维数组初始化,文中提到正确的初始化方式是a = [[0 for j in range(n ...

  2. python随机生成二维列表_对python产生随机的二维数组实例详解

    对python产生随机的二维数组实例详解 最近找遍了python的各个函数发现无法直接生成随机的二维数组,其中包括random()相关的各种方法,都没有得到想要的结果.最后在一篇博客中受到启发,通过列 ...

  3. java二维数组初始化值_Java二维数组初始化的方法

    对于一个新使用的工具,我们会进行初步的初始化工具,目的是为了加上一些使用的配置.在学过了一维数组后,那么二维数组是加了一层维度的一维数组.在初始化方面,二维数组有三种方法,相信很多人只是掌握了其中的一 ...

  4. golang二维数组初始化

    golang二维数组初始化来看一下,有点特别 func main() {x := 2y := 4table := make([][]int, x)for i := range table {table ...

  5. 二维数组初始化的形式有?

    二维数组初始化的形式有? 数据类型 数组名[整常量表达式][ 整常量表达式]={ 初始化数据 }: 在{ }中给出各数组元素的初值,各初值之间用逗号分开.把{ }中的初值依次赋给各数组元素. 有如下几 ...

  6. c# 怎样从bitmap初始化image类_C#二维数组初始化概括(新手篇)

    群友反馈的一个问题: 运行报错: 这个主要是数组定义的有问题,二维数组初始化:如下这样 string[,] aaa = new string[10, 10]; 其次得确保data在截取Substrin ...

  7. C语言的二维数组初始化的几种方式介绍(私藏大数组初始化方式)

    C语言的二维数组初始化的几种方式介绍 1.直接赋值 2.循环对每个元素赋值 3.借用memset/memset_s初始化为0或-1 4.`数组所有元素初始化为相同值(用于大数组初始化贼方便)` 1.直 ...

  8. c++ fill 二维数组初始化_C++如何给二维数组初始化

    C++给二维数组初始化的方法:首先定义两个整型变量,并给二维数组初始化不同的数值:然后用二重循环,输出数组中的各个数值:最后用大括号括起来的数字直接赋值. 本文操作环境:Windows7系统,Dev- ...

  9. python顺时针旋转_Python之二维数组N*N顺时针旋转90度

    需求:把一个二维数组顺时针旋转90度,现实数据的替换. 比如把4*4的二维数组顺时针旋转90度 原始数据是一个嵌套列表:[['A', 'B', 'C', 'D'], ['A', 'B', 'C', ' ...

最新文章

  1. 德鲁克管理思想:管理的7大理论、43条原则,每一条都是精华
  2. react结合ts与mobx环境搭建步骤详解
  3. 大数据技术:分布式系统和分布式事务
  4. 极速生成缩略图,Serverless 支撑赛事转播锁定冬奥亮点
  5. 阿里云引领云原生进化 | 云原生生态周报 Vol. 60
  6. adsl服务器客户端配置cisco_windows下,Kiwi_Syslog日志服务器的搭建
  7. difference between SAP UI5 RTL false and true - set breakpoint to change behavior
  8. 手把手教你用Java实现一个简易联网坦克对战小游戏
  9. using namespace cocos2d;
  10. Git:git pull 的使用
  11. 阶段3 3.SpringMVC·_03.SpringMVC常用注解_6 CookieValue注解
  12. DevCpp和VS2019安装armadillo库
  13. canvas绘图API
  14. 3轴/6轴/9轴传感器是什么, 加速计/陀螺仪/磁力计又是什么?
  15. 标准日本语初级上-------(1~12课)
  16. 熬夜读完这份高分宝典,四面字节之后成功拿下
  17. 第四章 机器人控制方法
  18. python篇 偏函数
  19. Log4j2日志框架
  20. vintage、迁移率、滚动率、入催率等概念——看完你就懂了

热门文章

  1. 9.python解答2020年蓝桥杯省赛python组 门牌制作
  2. php程序员自我描述_PHP程序员面试自我介绍
  3. SystemUI 下拉通知栏快捷键加载流程
  4. EtherCAT igh主站控制松下伺服(csp模式)
  5. golang分词工具sego的使用
  6. Activity总结
  7. git push -f 慎用
  8. sap 期间003/2016没有对帐户类型 S 和总帐 1405050200 打开
  9. matplotlib.pyplot画图--进阶
  10. StandardError 和 LookupError