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

createh54个月前 (01-16)技术教程44

最近学习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 中的 null 是什么

我们从一个语句声明开始:String s = null;回想一下什么是变量,什么是值。一个常见的比喻是将变量类比为盒子。就像可以使用盒子来装东西一样,也可以使用变量来存储值。声明变量时,我们需要设置其...

Java量与变量的区别

常量:其值不变即为常量。语法: 数据类型 常量名 = 值; double PI = 3.14;备注: 一般默认常量名大写。变量与常量之间关系(量间关系)先来一个简单的实例,好了解 Java 里变量与常...

Java变量运算

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

怎么配置JAVA环境变量

第一步、安装JAVA首先去官方网站下载最新的JDK版本,先接受协议再下载,如下图所示(图1)。安装刚才下载好的JDK ,按照流程一步步安装,几号安装目录就行(图2);测试JDK是否安装成功,在开始菜单...

JavaJDK环境变量配置

1.Java环境搭建1.1 JDK与JREJDK(Java Development Kit Java开发工具包)JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也包括了JRE。 所...