美文网首页python 入门
Python入门教程: 变量与数组的赋值

Python入门教程: 变量与数组的赋值

作者: 破旧的大卡车 | 来源:发表于2017-11-07 10:33 被阅读8次

在上一节Python入门教程: 计算范德蒙矩阵的行列式 我写程序中踩了一个坑。 就是变量的赋值与数组的赋值的效果是不一样的。

变量的赋值

大家先预测下下面代码的输出:

# set value for variable
a = 'a'
b = a
a = 'b'
print('a=', a, 'b=', b)

我想, 稍微有点编程经验的都应该猜到输出为
a= b b= a
恭喜, 那么你能否成功闯关下面的数组赋值呢?

数组的赋值

# set value for list
alist = ['a', 'b', 'c']
blist = alist
alist[0] = 'd'
print('alist=', alist, 'blist=', blist)

哈哈, 我想大多数人都猜不到, 输出结果为
alist= ['d', 'b', 'c'] blist= ['d', 'b', 'c']
其实, 当你写blist=alist的时候, python只是将alist这个指针复制给blist, 也即他们两个指向同一个数据块, 即数组:['a', 'b', 'c']。 这时你既可以可以通过alist这个指针来访问数组, 也可以通过blist来访问。 故你改变alist的时候, 你其实改变的是alist指向的数据, 此时blist也随着改变了。这点其实和C语言很像。

数组的复制

所以, 原理清楚了, 那么如何打破这种状态呢?我们不需要blist随着alist的改变而改变。其基本想法是

alist指向的数组复制到blist

这可由两种方法实现:

# copy list: method 1
blist=[ el for el in alist ]
# copy list: method 2
blist=alist.copy()

看到了吗, 第一种方法其实就是用一个for遍历alist中元素, 而第二种是python内置的copy()函数。

好了, 大家现在应该能看懂上一节计算行列式中如下的一行代码了吧?

    sM=[rM.copy() for rM in M]

这里, 本质在于我们是二维数组。你自己多试验下, 如果用sM=M.copy(), 然后改变M的值, sM的值如何改变?

不知大家是否和我一样, 愿意像这样在实践中学习呢?

相关文章

  • Python入门教程: 变量与数组的赋值

    在上一节Python入门教程: 计算范德蒙矩阵的行列式 我写程序中踩了一个坑。 就是变量的赋值与数组的赋值的效果...

  • python3测试工具开发快速入门教程3序列小结与文本处理

    [雪峰磁针石博客]python3快速入门教程 预计本章简稿完成日期: 2018-07-18 变量与赋值 自己实现求...

  • python3测试工具开发快速入门教程3序列小结与文本处理

    [雪峰磁针石博客]python3快速入门教程 预计本章简稿完成日期: 2018-07-18 变量与赋值 自己实现求...

  • Python变量和数据类型

    一. Python中的变量赋值 单变量赋值: 多变量赋值: 二. Python中的数据类型 Python有五个...

  • C语言特性(指针与数组)

    指针与数组 指向数组的指针变量 简单来讲就是数组变量保存了数组的首地址。 指针运算 目前,指针变量存在如下几种赋值...

  • ES6解构赋值

    解构赋值 按照一定的模式,从数组或对象中把数据拿出来,对变量进行赋值 一、数组解构赋值 等号左边与右边必须都是数组...

  • 数值数组

    [TOC] 一维数组及数组的基本知识 1、数组再使用前需要声明。声明格式为: 数组的赋值与一般变量的赋值格式相同。...

  • 2018-07-05 (变量的解构赋值)

    变量的解构赋值 从数组和对象中提取值,对变量进行赋值,这被称为解构。 可以从数组中提取值,按照对应位置,对变量赋值...

  • 解构赋值

    解构赋值 数组的解构赋值 嵌套,默认值,展开符 对象的解构赋值 对象解构赋值的本质与简写 对象解构的模式与变量 对...

  • 数组的解构赋值

    从数组中提取值赋值给变量 1、简单应用,交换变量的值 数组的赋值需要注意顺序

网友评论

    本文标题:Python入门教程: 变量与数组的赋值

    本文链接:https://www.haomeiwen.com/subject/kzpdmxtx.html