python 中[0]*2与0*2的区别说明

程序用例:

a=[[1,2],[4,5]]
b=[0]*len(a)
d=0*len(a)
print("len(a)=",len(a))
print("b=",b)
print("d=",d)
print(2*[1,2])
print([1,2]*2)

输出如下:

len(a)= 2

b= [0, 0]

d= 0

[1, 2, 1, 2]

[1, 2, 1, 2]

可以看出在矩阵后面程一个数等于将其复制几次。

补充:创建二维数组 以及 python中[0 ]* n与[0 for _ in range(n)]的区别与联系

一、浅拷贝于深拷贝

直接赋值:其实就是对象的引用(别名)。

浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。

深拷贝(deepcopy): copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。

二、区别

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

[0 for _ in range(n)] 才是创建,深拷贝

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

这两者的效果是一样的

dp1: [0, 0, 0, 0]

dp2: [0, 0, 0, 0]

二维数组,创建一个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]]

第一种方法不行,每一行的改变都会改变其他行

第二种、第三种方法均可

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。如有错误或未考虑完全的地方,望不吝赐教。

(0)

相关推荐

  • Python2与Python3的区别点整理

    python解释器默认编码(python2与python3的区别一) python2 解释器默认编码:ascii python3 解释器默认编码:utf-8 输入(python2与python3的区别二) python2:name=raw_input('请输入姓名') python3:name=input('请输入你的姓名') 输出(python2与python3的区别三) python2:print "你好" python3:print("你好") 数字表示(py

  • python_array[0][0]与array[0,0]的区别详解

    在学习python的时候, 看到有些 代码中使用array[0][0] 来提取位置元素 不太明白. 动手实验了一下 import numpy as np a = np.array([np.arange(12),np.arange(12,24)]) >>>print a [[ 0 1 2 3 4 5 6 7 8 9 10 11] [12 13 14 15 16 17 18 19 20 21 22 23]] >>>print a[0][6] 6 [0][6] means:

  • python2和python3在处理字符串上的区别详解

    python2和python3对于字符串的处理有很大的区别 熟悉了python2的写法用python3时真的会遇到很多问题啊-- 区别 python2中有一种类型叫做unicode型,例 type(u"a") => str型 type("a".decode('utf8')) => unicode型 两者返回的类型都是unicode型 而在python3中,所有的字符串都是unicode,所以就不存在单独的unicode型,全部都是字符串型 type(u&

  • Python2与Python3的区别实例总结

    本文实例总结了Python2与Python3的区别.分享给大家供大家参考,具体如下: Python的3??.0版本相对于Python的早期版本,这是一个较大的升级.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容.许多针对早期Python版本设计的程式都无法在Python 3.0上正常执行.为了照顾现有程式,Python 2.6作为一个过渡版本,基本使用了Python 2.x的语法和库,同时考虑了向Python 3.0的迁移,允许使用部分Python 3.0的语法与函数.新

  • Python中 传递值 和 传递引用 的区别解析

    对于不可变类型传递值(不会影响原数据) 不可变类型 对于可变类型传递引用(会影响原数据) 不可变类型传递引用 python3不可变类型 Number(数字) String(字符串) Tuple (元组) python3可变类型 List(列表) Dictionary (字典) Sets(集合) 参数传递的思考 我们声明的变量名可以看做便签 为变量名赋值的操作可以看做将标签贴到"值"的表面(值可以是可变类型,和不可变类型) 以链表中的节点对象为例(实例化的节点对象为不可变类型, 但对象中

  • 对python中for、if、while的区别与比较方法

    如下所示: if应用举例: #if 若条件成立,只执行一次 #if 条件:如果条件成立,执行条件后的代码块内容,不成立,直接跳过代码块 #判断如果年龄age小于18,输出未成年 #=一个等号表示赋值的意思 ==双等号判断等号两边的值是否相等 if age==18: print('未成年') #两种情况的判断 #如果age小于18 输出未成年,否则输出成年人 #如果条件成立,执行条件后的代码块内容,条件不成立,执行else后的代码块内容,有且只会执行其中某一个代码块 if age<18: prin

  • python中的数组赋值与拷贝的区别详解

    具体的注解我已经写在了程序里面:通俗的解释了python里面的浅拷贝与深拷贝的不同,请看程序. # -*- coding: utf-8 -*- import numpy as np import copy as cp import matplotlib.pyplot as plt import time import math fig = plt.figure() ax = fig.add_subplot(241) # 定义一个多维数组 x = np.array([[1, 2, 3], [4,

  • 浅谈Python中threading join和setDaemon用法及区别说明

    Python多线程编程时,经常会用到join()和setDaemon()方法,今天特地研究了一下两者的区别. 1.join ()方法:主线程A中,创建了子线程B,并且在主线程A中调用了B.join(),那么,主线程A会在调用的地方等待,直到子线程B完成操作后,才可以接着往下执行,那么在调用这个线程时可以使用被调用线程的join方法. 原型:join([timeout]) 里面的参数时可选的,代表线程运行的最大时间,即如果超过这个时间,不管这个此线程有没有执行完毕都会被回收,然后主线程或函数都会接

  • python中random.randint和random.randrange的区别详解

    在python中,通过导入random库,就能使用randint 和 randrange 这两个方法来产生随机整数.那这两个方法的区别在于什么地方呢?让我们一起来看看! 区别: randint 产生的随机数区间是包含左右极限的,也就是说左右都是闭区间的[1, n],能取到1和n.而 randrange 产生的随机数区间只包含左极限,也就是左闭右开的[1, n),1能取到,而n取不到.randint 产生的随机数是在指定的某个区间内的一个值,而 randrange 产生的随机数可以设定一个步长,也

  • python中format函数与round函数的区别

    目录 前言 不同之处 round函数 进位原则 示例 format函数 示例 总结 前言 在对数据进行处理时我们常常会用到format与round函数.二者都能保留若干位小数,但在处理过程上稍有不同. 不同之处 返回类型不同:format函数进行格式化后返回结果的数据类型是str字符串,round函数返回结果的数据类型是float浮点型 进位不同:保留若干位小数时,format遵循的是四舍五入原则,而round并不遵循该原则,round进位原则为四舍六入次偶进. 位数保留不同:规定如保留6位小数

  • 关于python中不同函数读取图片格式的区别浅析

    目录 前言:关于uint8和float型数据 一.skimage.io. 二.imageio 补充:python处理图像转化为uint8格式 总结 前言:关于uint8和float型数据 为了节省存储空间,图像一般存储在一种特殊的数据类型——uint8(8位无符号整数)中,以此方式存储的图像称作8位图像. imread把灰度图像存入一个8位矩阵,当为RGB图像时,就存入8位RGB矩阵中. 因此,通过matlab以及各种python包(skimage,imageio)读入图像的数据类型都是uint

  • Python中print和return的作用及区别解析

    print只是为了向用户显示一个字符串,表示计算机内部正在发生的事情.计算机却无法使用该print出现的内容. return是函数的返回值.该值通常是人类用户看不到的,但是计算机可以在其他功能中使用它. print不会以任何方式影响函数.它只是为了帮助人类使用函数.它对于理解程序如何工作非常有用,并且可以在调试中用于检查程序中的各种值而不会中断程序.除了帮助人类看到人们想要看到的结果,print其余的事情都不做. return是函数返回值的主要方式.所有函数都将返回一个值,如果没有return语

  • python中sort sorted reverse reversed函数的区别说明

    sort()是可变对象(字典.列表)的方法,无参数,无返回值,sort()会改变可变对象,因此无需返回值. sort()方法是可变对象独有的方法或者属性,而作为不可变对象如元组.字符串是不具有这些方法的,如果调用将会返回一个异常. 代码如下: >>> a=[5,4,3,2,1] >>> a.sort() >>> [1, 2, 3, 4, 5] >>> a >>> [1, 2, 3, 4, 5] sorted()是py

  • 详解Python中sorted()和sort()的使用与区别

    目录 sort()方法是什么 如何妙用sorted() 方法 总结 在 Python 中,你可以使用 sorted() 方法或 sort() 方法对数据进行排序. 在本文中,我将提供 sorted() 和 sort() 方法的代码示例,并解释两者之间的区别. sort()方法是什么 此方法接受一个列表并对其进行排序.但,请记住此方法没有返回值,即返回None. 下面例子中,我们有一个数字列表,我们可以使用 sort() 方法按升序对列表进行排序. my_list = [67, 2, 999, 1

随机推荐