Menu
CoddyTech

变量是什么?

在编程中,变量是内存中一个有名字的位置,用来存放程序运行时可以读取和修改的值。有了 score 或 user_name 这样的名字,代码不必知道值存放在哪里,就能引用它。

作者 Kevin Spektor, 联合创始人兼 CTO

更新于 2026年9月24日

一个记分的游戏需要记住一个数字,不断往上加,最后把它显示出来。这个数字不能直接写进代码里,因为每次有人玩,它都不一样。所以程序在内存中留出一个位置,给它起个名字,比如 score,每当需要当前的值时就使用这个名字。

变量是如何工作的

在程序运行过程中,变量会经历三件事:

  1. 创建。 程序为一个值预留内存,并给它加上一个名字。在 Python 中,第一次给这个名字赋值时就会创建变量。在 Java 和 C 中,你要先带着类型声明变量,比如 int score;。
  2. 赋值。 用 = 把一个值存到这个名字下。再次赋值会替换掉旧的值。
  3. 使用。 名字出现在表达式中的任何地方,程序都会读取它在那一刻存放的值。
Start: 0
After one point: 10
Doubled: 20

在每一行赋值语句中,先用 score 当时的值算出右边的结果,再把结果存回同一个名字下。名字保持不变,它存放的值却在变化。

等号的意思是“存入”

在数学里,x = x + 1 无解。在程序里,它是一条普通的指令:取出 x 当前的值,加 1,再把结果存回 x。= 是赋值运算符,它总是把右边的值放进左边的名字里。

要判断两个值是否相等,编程语言用的是另一个运算符 ==。表达式 x == 5 不会改变任何东西,它只会得出 True 或 False,也就是一个布尔值。

数学中的含义和这里有关联,但并不相同。在代数中,2x + 3 = 7 里的 x 代表一个需要求解的未知数。在程序中,变量存放的是一个已知的值,这个值会随着程序运行而改变。

变量和数据类型

每个值都有类型:整数、小数、文本、布尔值、列表。不同语言的区别在于变量本身是否有类型。

在 Python 和 JavaScript 中,类型由值携带,一个变量在不同时刻可以存放不同类型的值。这叫作动态类型:

42 <class 'int'>
forty-two <class 'str'>

在 Java、C 和 C++ 中,变量有一个在声明时就确定的固定类型。这叫作静态类型:如果代码试图把文本存进 int 变量,编译器会在程序运行之前就拒绝它。

int age = 30;          // Java: type, name, value
String name = "Rosa";
let age = 30;          // JavaScript: can be reassigned
const PI = 3.14159;    // cannot be reassigned

在 C 语言中,类型还决定了变量占用多少内存。在几乎所有现代系统上,int 占 4 个字节,double 占 8 个,char 正好占 1 个。要用一个名字保存许多值,比如游戏中的所有分数,就要用数组或列表,并通过位置访问每个值,比如 scores[0]。

盒子和标签

一种常见的说法是把变量想象成一个装着值的盒子。这个比喻很适合 C 语言:int x; 确实是一块固定的内存区域,y = x; 会把值复制到另一块区域。

Python 的工作方式更像标签。每个值都是一个对象,变量是贴在对象上的名字。当两个名字指向同一个列表时,区别就显现出来了:

5 6
[1, 2, 3, 4]

对于数字,y = y + 1 创建了一个新数字,并把标签 y 移到它上面,所以 x 仍然指向 5。对于列表,b = a 什么都没有复制:两个名字指向同一个列表,所以通过 b 做的修改,通过 a 也能看到。如果你想要一个独立的列表,就写 b = a.copy()。Java 和 JavaScript 中的对象和数组也是这样。

作用域:变量在哪里存在

变量只在程序的一部分范围内可见,这个范围叫作它的作用域。在函数内部创建的变量是局部变量:它在函数运行期间存在,函数返回后就消失了。在文件顶层创建的变量是全局变量,在整个文件中都可以读取。

局部变量更容易理解,因为所有能修改它的代码行都在同一个函数里。出于相反的原因,依赖大量全局变量的程序更难调试。

变量命名

好的名字能说明值的含义:total_price、is_logged_in、retries_left。大多数语言都遵循相同的规则:

  • 名字由字母、数字和下划线组成,不能以数字开头;
  • 名字不能是语言的关键字,比如 if、for 或 class;
  • 名字区分大小写,所以 total 和 Total 是两个不同的变量。

不同语言的命名风格不同。Python 用 snake_case(user_name),Java 和 JavaScript 用 camelCase(userName)。永远不应改变的值通常用大写命名,比如 MAX_SIZE。

常见错误

在变量有值之前就使用它。 Python 会以 NameError 停止:

NameError: name 'total' is not defined

名字拼错时也会出现同样的错误,因为对计算机来说,totla 和 total 是两个不同的名字。

把 == 写成了 =。 在 Python 中,if x = 5: 是语法错误,所以你马上就会发现。在 C 和 JavaScript 中,if (x = 5) 是合法的代码:它把 5 存入 x,条件永远为真。程序照常运行,却给出错误的结果,这是一种可能要花很长时间才能找到的逻辑错误。

让一个变量身兼两职。 一个变量在函数开头存放价格、在末尾存放数量,程序仍然能运行,但每个读代码的人都得记着它当前代表的是哪种含义。给每种含义起一个自己的名字。

下一步学什么

变量存放值,下一步就是了解值有哪些种类:阅读布尔值是什么了解真和假,阅读数组是什么了解如何用一个名字保存多个值。Python 变量指南更详细地介绍了赋值、命名规则和多重赋值,而 Python 课程从第一课起就会让你编写和修改变量。

常见问题

Python 中的变量是什么?
Python 中的变量是指向某个值的名字。你通过给它赋值来创建它,比如 age = 30,不需要声明类型,而且同一个名字之后还可以指向另一种类型的值。按照惯例,Python 的变量名用 snake_case 风格书写。
变量最简单的定义是什么?

变量是程序存储的、可以改变的值的名字。名字保持不变,名字下的值却可以被替换,就像记分牌上“主队”这个标签不变,下面的分数却在不断增加。

怎样给孩子解释变量?
把它比作一个贴着标签的盒子。标签就是名字,比如 score,盒子里一次只装一样东西。你可以往里看看装了什么,也可以把它拿出来、放进新的东西,而标签始终不变。
变量和常量有什么区别?
变量的值在设定之后可以修改,而常量的值一旦赋值就固定不变。Java 用 final 标记常量,JavaScript 和 C 用 const。Python 没有强制的常量,所以程序员会把名字写成大写,比如 MAX_USERS,表示它不应该被修改。
编程中的变量有哪些类型?

变量通常按可见范围分类:局部变量只存在于一个函数内部,全局变量在整个文件或程序中都可见,实例变量属于某个类的一个对象。变量也可以按它存放的值的类型来描述,比如整数、浮点数、字符串或布尔值。

Coddy 编程语言插图

和 Coddy 一起学编程

开始