深入理解Python中的变量、对象、赋值和可变性

createh55个月前 (01-16)技术教程72

最近学习Pyhon,联想到之前学习的Java、SQL时,有些新体会,在此聊一聊。

Python中一个知识点:变量和对象。变量指向对象,或者说变量就是对象的名字,类似SQL中的AS。

Python中另一个知识点:可变对象和不可变对象。可变对象修改时,会影响它的所有变量;不可变对象不可修改,当从变量角度修改时,会创建一个新的对象,然后将变量指向新对象。

在本文中:

  1. 变量=变量名=对象别名
  2. 值=对象

知识

变量可以指向一个对象。

多个变量可以指向同一个对象。

变量可以被重新赋值。

变量之间的赋值,从来都不会复制数据,只是将变量和对象联系起来。

不可变对象无法修改,从变量角度修改时,实际是创建了一个新对象。

可变对象的修改,会影响所有指向它的变量。

列表中元素引用(例如nums[1]),本质都是变量。

Python 是动态类型的,变量没有类型。任何变量在任何时候都可以引用任何值。变量可以引用一个整数,然后引用一个字符串,然后引用一个函数,然后引用一个模块。

正如变量没有类型一样,值也没有作用域。当我们说函数有局部变量时,我们的意思是该变量的作用域为该函数:您不能在函数外部使用该变量,并且当函数返回时,该变量将被销毁。如果变量的值有其他引用,它将在函数调用之外继续存在

案例

将列表[1, 2, 3] 修改为 [10, 20, 30]。可能会这么写:

以上代码不起作用。因为在第一次迭代中,x 是nums[0]的值的别名。正如之前介绍的,当您有两个变量指向同一个值且值是不可变对象的时候,修改其中一个变量,另一个变量不会更改。回到这个案例,第一次迭代中,for循环中x指向1,1属于数字类型、不可变对象。循环体内,修改x时,会创建一个10,然后x指向10,但 nums[0] 仍然指向旧值 1。

最好的建议是避免改变列表,而是创建新列表:nums = [ 10*x for x in nums ]

相关文章

Java变量

编者按计算机能够直接识别的是二进制流,原始的程序设计都是基于二进制方式设计的。随着计算机语言的发展,计算机编程越来越偏离二进制方式;为什么会这样呢?理由很简单,程序是人来编写、阅读和维护的!变量是编程...

数据必学Java基础(十一):变量和常量详细讲解

#头条创作挑战赛#变量和常量举例:丽丽的年龄:去年17岁,今年18岁,明年19岁年龄:17--》18---》19 --》值不断变化年龄---》变量常量: 17 , 18 , 19 ----》 常量中的...

Java类和对象的概念

Java是一门面向对象的编程语言,理解Java,首先要理解类与对象这两个概念。Java中的类可以看做C语言中结构体的升级版。结构体是一种构造数据类型,可以包含不同的成员(变量),每个成员的数据类型可以...

自学Java2(保姆级教学)——常量与变量

顾名思义,常量就是在程序运行过程中,其值不会发生改变的量;变量则是在程序运行过程中其值可以发生改变的量。常量比较好理解,这里着重讲变量,而变量的主要作用就是取值和修改值。首先我将书上对变量的解释写一下...

什么是 Java 注解?

本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻,欢迎关注!作者| 慕课网精英讲师 ColorfulC通过本篇文章你将了解什么是注解,注解的作用,Java 中内置注解有哪些以及注解的分类,...

Java变量运算

Java变量运算描述运用 Java 变量计算圆柱体积。题目编写程序,读入圆柱体的半径和高,并使用下列公式计算圆柱的体积:面积?=?半径?×?半径?×?P?体积?=?面积?×?高??题目解决思路创建 扫...