Skip to content

运算符是什么 ​

本章节主要说明 Python 的运算符。

举个简单的例子:

4 + 5 = 9

例子中, 4 和 5 被称为 操作数 ,+ 称为 运算符 。

Python 语言支持以下类型的运算符:

接下来让我们一个个来学习Python的运算符。


Python算术运算符 ​

以下假设变量 a=10,变量 b=21:

运算符描述实例
+加 - 两个对象相加a + b 输出结果 31
-减 - 得到负数或是一个数减去另一个数a - b 输出结果 -11
*乘 - 两个数相乘或是返回一个被重复若干次的字符串a * b 输出结果 210
/除 - x 除以 yb / a 输出结果 2.1
%取模 - 返回除法的余数b % a 输出结果 1
**幂 - 返回x的y次幂a**b 为10的21次方
//取整除 - 往小的方向取整数>>> 9//2 4 >>> -9//2 -5

以下实例演示了Python所有算术运算符的操作:

实例(Python 3.0+) ​

python
a = 21
b = 10
c = 0

c = a + b
print("1 - c 的值为:", c)

c = a - b
print("2 - c 的值为:", c)

c = a * b
print("3 - c 的值为:", c)

c = a / b
print("4 - c 的值为:", c)

c = a % b
print("5 - c 的值为:", c)

a = 2
b = 3
c = a**b
print("6 - c 的值为:", c)

a = 10
b = 5
c = a // b
print("7 - c 的值为:", c)

以上实例输出结果:

1 - c 的值为: 31
2 - c 的值为: 11
3 - c 的值为: 210
4 - c 的值为: 2.1
5 - c 的值为: 1
6 - c 的值为: 8
7 - c 的值为: 2

Python 比较运算符 ​

以下假设变量 a 为 10,变量 b 为20:

运算符描述实例
==等于 - 比较对象是否相等(a == b) 返回 False。
!=不等于 - 比较两个对象是否不相等(a!= b) 返回 True。
>大于 - 返回x是否大于y(a > b) 返回 False。
<小于 - 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。(a < b) 返回 True。
>=大于等于 - 返回x是否大于等于y。(a >= b) 返回 False。
<=小于等于 - 返回x是否小于等于y。(a <= b) 返回 True。

以下实例演示了Python所有比较运算符的操作:

实例(Python 3.0+) ​

python
a = 21
b = 10
c = 0

if (a == b):
    print("1 - a 等于 b")
else:
    print("1 - a 不等于 b")

if (a != b):
    print("2 - a 不等于 b")
else:
    print("2 - a 等于 b")

if (a < b):
    print("3 - a 小于 b")
else:
    print("3 - a 大于等于 b")

if (a > b):
    print("4 - a 大于 b")
else:
    print("4 - a 小于等于 b")

a = 5
b = 20

if (a <= b):
    print("5 - a 小于等于 b")
else:
    print("5 - a 大于 b")

if (b >= a):
    print("6 - b 大于等于 a")
else:
    print("6 - b 小于 a")

以上实例输出结果:

1 - a 不等于 b
2 - a 不等于 b
3 - a 大于等于 b
4 - a 大于 b
5 - a 小于等于 b
6 - b 大于等于 a

Python赋值运算符 ​

以下假设变量a为10,变量b为20:

运算符描述实例
=简单的赋值运算符c = a + b 将 a + b 的运算结果赋值为 c
+=加法赋值运算符c += a 等效于 c = c + a
-=减法赋值运算符c -= a 等效于 c = c - a
*=乘法赋值运算符c *= a 等效于 c = c * a
/=除法赋值运算符c /= a 等效于 c = c / a
%=取模赋值运算符c %= a 等效于 c = c % a
**=幂赋值运算符c **= a 等效于 c = c ** a
//=取整除赋值运算符c //= a 等效于 c = c // a
:=海象运算符,这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。 Python3.8 版本新增运算符 。在这个示例中,赋值表达式可以避免调用 len() 两次: if (n := len(a)) > 10: print(f"List is too long ({n} elements, expected <= 10)")

以下实例演示了Python所有赋值运算符的操作:

实例(Python 3.0+) ​

python
a = 21
b = 10
c = 0

c = a + b
print("1 - c 的值为:", c)

c += a
print("2 - c 的值为:", c)

c *= a
print("3 - c 的值为:", c)

c /= a
print("4 - c 的值为:", c)

c = 2
c %= a
print("5 - c 的值为:", c)

c **= a
print("6 - c 的值为:", c)

c //= a
print("7 - c 的值为:", c)

以上实例输出结果:

1 - c 的值为: 31
2 - c 的值为: 52
3 - c 的值为: 1092
4 - c 的值为: 52.0
5 - c 的值为: 2
6 - c 的值为: 2097152
7 - c 的值为: 99864

在 Python 3.8 及更高版本中,引入了一种新的语法特性,称为"海象运算符"(Walrus Operator),它使用:= 符号。这个运算符的主要目的是在表达式中同时进行赋值和返回赋值的值。

使用海象运算符可以在一些情况下简化代码,尤其是在需要在表达式中使用赋值结果的情况下。这对于简化循环条件或表达式中的重复计算很有用。

下面是一个简单的实例,演示了海象运算符的使用:

实例 ​

python
# 传统写法
n = 10
if n > 5:
    print(n)

# 使用海象运算符
if (n := 10) > 5:
    print(n)
  • if (n := 10) > 5::这是使用海象运算符(:= )的写法。海象运算符在表达式中进行赋值操作。
    • (n := 10) :将变量 n 赋值为 10,同时返回这个赋值结果。
      • > 5 :检查赋值后的 n 是否大于 5。如果条件为真,则执行接下来的代码块。
  • print(n) :如果条件为真,打印变量 n 的值(即 10)。

海象运算符的优点:

  • 海象运算符(:= )允许在表达式内部进行赋值,这可以减少代码的重复,提高代码的可读性和简洁性。
  • 在上述例子中,传统写法需要单独一行来赋值 n ,然后在 if 语句中进行条件检查。而使用海象运算符的写法可以在 if 语句中直接进行赋值和条件检查。

Python位运算符 ​

按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:

下表中变量 a 为 60,b 为 13二进制格式如下:

a = 0011 1100

b = 0000 1101

-----------------

a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011
运算符描述实例
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a | b) 输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,">>"右边的数指定移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111

以下实例演示了Python所有位运算符的操作:

实例(Python 3.0+) ​

python
a = 60
b = 13
c = 0

c = a & b
print("1 - c 的值为:", c)

c = a | b
print("2 - c 的值为:", c)

c = a ^ b
print("3 - c 的值为:", c)

c = ~a
print("4 - c 的值为:", c)

c = a << 2
print("5 - c 的值为:", c)

c = a >> 2
print("6 - c 的值为:", c)

以上实例输出结果:

1 - c 的值为: 12
2 - c 的值为: 61
3 - c 的值为: 49
4 - c 的值为: -61
5 - c 的值为: 240
6 - c 的值为: 15

Python逻辑运算符 ​

Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:

运算符逻辑表达式描述实例
andx and y布尔"与" - 如果 x 为 False,x and y 返回 x 的值,否则返回 y 的计算值。(a and b) 返回 20。
orx or y布尔"或" - 如果 x 是 True,它返回 x 的值,否则它返回 y 的计算值。(a or b) 返回 10。
notnot x布尔"非" - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。not(a and b) 返回 False

以上实例输出结果:

实例(Python 3.0+) ​

python
a = 10
b = 20

if (a and b):
    print("1 - 变量 a 和 b 都为 true")
else:
    print("1 - 变量 a 和 b 有一个不为 true")

if (a or b):
    print("2 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
    print("2 - 变量 a 和 b 都不为 true")

a = 0

if (a and b):
    print("3 - 变量 a 和 b 都为 true")
else:
    print("3 - 变量 a 和 b 有一个不为 true")

if (a or b):
    print("4 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
    print("4 - 变量 a 和 b 都不为 true")

if not (a and b):
    print("5 - 变量 a 和 b 都为 false,或其中一个变量为 false")
else:
    print("5 - 变量 a 和 b 都为 true")

以上实例输出结果:

1 - 变量 a 和 b 都为 true
2 - 变量 a 和 b 都为 true,或其中一个变量为 true
3 - 变量 a 和 b 有一个不为 true
4 - 变量 a 和 b 都为 true,或其中一个变量为 true
5 - 变量 a 和 b 都为 false,或其中一个变量为 false

Python成员运算符 ​

除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

运算符描述实例
in如果在指定的序列中找到值返回 True,否则返回 False。x 在 y 序列中, 如果 x 在 y 序列中返回 True。
not in如果在指定的序列中没有找到值返回 True,否则返回 False。x 不在 y 序列中, 如果 x 不在 y 序列中返回 True。

以下实例演示了Python所有成员运算符的操作:

实例(Python 3.0+) ​

python
a = 10
b = 20
list = [1, 2, 3, 4, 5]

if (a in list):
    print("1 - 变量 a 在给定的列表中 list 中")
else:
    print("1 - 变量 a 不在给定的列表中 list 中")

if (b not in list):
    print("2 - 变量 b 不在给定的列表中 list 中")
else:
    print("2 - 变量 b 在给定的列表中 list 中")

a = 2
if (a in list):
    print("3 - 变量 a 在给定的列表中 list 中")
else:
    print("3 - 变量 a 不在给定的列表中 list 中")

以上实例输出结果:

1 - 变量 a 不在给定的列表中 list 中
2 - 变量 b 不在给定的列表中 list 中
3 - 变量 a 在给定的列表中 list 中

Python身份运算符 ​

身份运算符用于比较两个对象的存储单元

运算符描述实例
isis 是判断两个标识符是不是引用自一个对象x is y, 类似 id(x) == id(y), 如果引用的是同一个对象则返回 True,否则返回 False
is notis not 是判断两个标识符是不是引用自不同对象x is not y , 类似 id(x)!= id(y) 。如果引用的不是同一个对象则返回结果 True,否则返回 False。

注: id() 函数用于获取对象内存地址。

以下实例演示了Python所有身份运算符的操作:

实例(Python 3.0+) ​

python
a = 20
b = 20

if (a is b):
    print("1 - a 和 b 有相同的标识")
else:
    print("1 - a 和 b 没有相同的标识")

if (id(a) == id(b)):
    print("2 - a 和 b 有相同的标识")
else:
    print("2 - a 和 b 没有相同的标识")

b = 30

if (a is b):
    print("3 - a 和 b 有相同的标识")
else:
    print("3 - a 和 b 没有相同的标识")

if (a is not b):
    print("4 - a 和 b 没有相同的标识")
else:
    print("4 - a 和 b 有相同的标识")

以上实例输出结果:

1 - a 和 b 有相同的标识
2 - a 和 b 有相同的标识
3 - a 和 b 没有相同的标识
4 - a 和 b 没有相同的标识

is 与 == 区别:

is 用于判断两个变量引用对象是否为同一个,== 用于判断引用变量的值是否相等。

python
>>> a = [1, 2, 3]
>>> b = a
>>> b is a
True
>>> b == a
True
>>> b = a[:]
>>> b is a
False
>>> b == a
True

Python运算符优先级 ​

以下表格列出了从最高到最低优先级的所有运算符, 相同单元格内的运算符具有相同优先级。 运算符均指二元运算,除非特别指出。 相同单元格内的运算符从左至右分组(除了幂运算是从右至左分组):

运算符描述
(expressions...), [expressions...], {key: value...}, {expressions...}圆括号的表达式
x[index], x[index:index], x(arguments...), x.attribute读取,切片,调用,属性引用
await xawait 表达式
**乘方(指数)
+x, -x, ~x正,负,按位非 NOT
*, @, /, //, %乘,矩阵乘,除,整除,取余
+, -加和减
<<, >>移位
&按位与 AND
^按位异或 XOR
|按位或 OR
`in`,`not in`, `is`,`is not`, `<`, `<=`, `>`, `>=`, `!=`, `==`比较运算,包括成员检测和标识号检测
`not x`逻辑非 NOT
`and`逻辑与 AND
`or`逻辑或 OR
`if` -- `else`条件表达式
`lambda`lambda 表达式
:=赋值表达式

以下实例演示了Python所有运算符优先级的操作:

实例(Python 3.0+) ​

python
a = 20
b = 10
c = 15
d = 5
e = 0

e = (a + b) * c / d
print("(a + b) * c / d 运算结果为:", e)

e = ((a + b) * c) / d
print("((a + b) * c) / d 运算结果为:", e)

e = (a + b) * (c / d)
print("(a + b) * (c / d) 运算结果为:", e)

e = a + (b * c) / d
print("a + (b * c) / d 运算结果为:", e)

以上实例输出结果:

(a + b) * c / d 运算结果为: 90.0
((a + b) * c) / d 运算结果为: 90.0
(a + b) * (c / d) 运算结果为: 90.0
a + (b * c) / d 运算结果为: 50.0

and 拥有更高优先级:

实例 ​

python
x = True
y = False
z = False

print("情况1:默认优先级(先算and)")
if x or y and z:
    print("yes")
else:
    print("no")

print("\n情况2:强制改变优先级(先算or)")
if (x or y) and z:
    print("yes")
else:
    print("no")

以上实例先计算 y and z 并返回 False ,然后 x or False 返回 True,输出结果:

情况1:默认优先级(先算and)
yes

情况2:强制改变优先级(先算or)
no

注意: Python3 已不支持 <> 运算符,可以使用!= 代替,如果你一定要使用这种比较运算符,可以使用以下的方式:

python
>>> from __future__ import barry_as_FLUFL
>>> 1 <> 2
True

三元运算符(条件表达式) ​

语法: <true_value> if 条件表达式 else <false_value>

条件为真时整个表达式的结果是第一个值,否则是第二个值。因为它能"算出结果",所以是表达式而不是语句,可以直接写在赋值、函数参数里面。

python
age = 20

# 普通写法
if age >= 18:
    result = "成年"
else:
    result = "未成年"

# 三元运算符写法:一行搞定
result = "成年" if age >= 18 else "未成年"
print(result)   # 成年

在项目中的实际用法(AI 智能伴侣侧边栏,当前会话的按钮高亮):

python
st.button(
    session,
    key=f"load_{session}",
    type="primary" if session == st.session_state.current_session else "secondary"
)

条件是"这个会话是不是当前会话",为真则按钮类型取 "primary"(高亮),否则取 "secondary"(普通)。

注意: 三元运算符是先算条件前面那个值、再看条件的写法,不要和 and/or 的短路混用;嵌套多层(a if x else b if y else c)会严重影响可读性,超过两层建议改回 if...elif...else。


相关 ​

练习题 ​

一、知识回顾(读完直接做下面的实践题) ​

  1. 算术运算符:+ 加、- 减、* 乘、/ 除(结果一定是浮点数)、% 取模(余数)、** 幂、// 整除(往小的方向取整数,-9 // 2 得 -5)
  2. 比较运算符:== 等于、!= 不等于、>、<、>=、<=,结果都是 True 或 False;注意 = 是赋值、== 才是比较,别写混
  3. 赋值运算符:= 直接赋值;复合赋值 +=、-=、*=、/=、%=、**=、//=——c += a 就等价于 c = c + a
  4. 海象运算符 :=(Python 3.8 新增):在表达式里同时赋值并返回这个值,如 if (n := len(a)) > 10: 可以避免把 len(a) 算两遍
  5. 位运算符:把数字看成二进制来算——& 按位与、| 按位或、^ 按位异或、~ 按位取反、<< 左移、>> 右移(例:60 & 13 = 12)
  6. 逻辑运算符:and(x 为假就返回 x,否则返回 y)、or(x 为真就返回 x,否则返回 y)、not(取反);and/or 返回的是参与运算的值本身,不一定是 True/False(10 and 20 得 20)
  7. 成员运算符:in(在序列里找到就返回 True)、not in(找不到才返回 True),可用于字符串、列表、元组
  8. 身份运算符:is / is not 比的是是不是同一个对象(相当于比 id());== 比的是值。b = a 是同一个对象,b = a[:] 只是值相等的新对象
  9. 运算符优先级(从高到低):括号 → 索引/切片/调用/属性 → ** → 正负号、~ → * / // % → + - → 移位 → & ^ | → 比较/成员/身份 → not → and → or → 条件表达式
  10. 三元运算符(条件表达式):值1 if 条件 else 值2——条件为真取前面的值,为假取后面的值;它是个表达式(能算出结果),可以直接写在赋值和函数参数里

二、裸写题 ​

    • 15 + 4(加法)
    • 15 - 4(减法)
    • 15 * 4(乘法)
    • 15 / 4(除法,得到小数)
    • 15 // 4(整除)
    • 15 % 4(取余)
    • 2 ** 10(乘方)

    批改(2026-09-28):❌ 7 个 print 都漏了 f 前缀,输出成了字面量 15+4={15+4};正确写法是 print(f"15 + 4 = {15 + 4}")。另外第 7 行写的是 15**4(题面要求 2 ** 10),字符串里还多写了一个 a(15**4=a{15**4}),应改成 print(f"2 ** 10 = {2 ** 10}")。

    - 提示(先自己想,实在想不出再点开)

    一级 · 思路:七个小算式一个一个算出来打印,把算式直接写进输出字符串的花括号里,让 Python 替你算完再填进去 二级 · 方法:带 f 前缀的格式化输出,如 print(f"15 + 4 = {15 + 4}");记住 // 是整除、% 是取余、** 是乘方 三级 · 骨架:print(f"15 + 4 = {15 ____ 4}") / print(f"2 ** 10 = {2 ____ 10}")

    - 参考答案(做完再点开)

    python
    # 2-1
    print(f"15 + 4 = {15 + 4}")      # 19
    print(f"15 - 4 = {15 - 4}")      # 11
    print(f"15 * 4 = {15 * 4}")      # 60
    print(f"15 / 4 = {15 / 4}")      # 3.75
    print(f"15 // 4 = {15 // 4}")    # 3
    print(f"15 % 4 = {15 % 4}")      # 3
    print(f"2 ** 10 = {2 ** 10}")    # 1024
    • 比较 10 == 10、10 != 5、10 > 5、10 < 5、10 >= 10、10 <= 5
    • 打印每个结果

    批改(2026-09-28):⚠️ 6 个结果值全对(True/True/True/False/True/False),但第 5 项写的是 10 >= 5,题面要求 10 >= 10(两者结果恰好都是 True)。

    - 提示(先自己想,实在想不出再点开)

    一级 · 思路:六个比较各算一遍,把整个比较式放进花括号里,Python 会把 True/False 填进去 二级 · 方法:比较运算符 ==、!=、>、<、>=、<=;输出用 print(f"10 == 10: {10 == 10}") 这种写法 三级 · 骨架:print(f"10 >= 10: {10 ____ 10}") / print(f"10 != 5: {10 ____ 5}")

    - 参考答案(做完再点开)

    python
    # 2-2
    print(f"10 == 10: {10 == 10}")   # True
    print(f"10 != 5: {10 != 5}")    # True
    print(f"10 > 5: {10 > 5}")      # True
    print(f"10 < 5: {10 < 5}")      # False
    print(f"10 >= 10: {10 >= 10}")  # True
    print(f"10 <= 5: {10 <= 5}")    # False
    • 创建变量 a = 10
    • 用 += 加 5
    • 用 -= 减 3
    • 用 *= 乘 2
    • 用 //= 整除 3
    • 每步打印结果

    批改(2026-09-28):✅ 正确(15、12、24、8 四步结果都对);没有打印初始值 10,参考答案有 print(f"初始值: a = {a}") 这一行。

    - 提示(先自己想,实在想不出再点开)

    一级 · 思路:每做一次复合赋值就立刻输出一次,盯着变量一步一步变成多少 二级 · 方法:复合赋值运算符 +=、-=、*=、//=——a += 5 等价于 a = a + 5三级 · 骨架:a ____ 5 / a -= ____ / a *= 2 / a //= ____

    - 参考答案(做完再点开)

    python
    # 2-3
    a = 10
    print(f"初始值: a = {a}")    # 10
    
    a += 5
    print(f"a += 5: {a}")       # 15
    
    a -= 3
    print(f"a -= 3: {a}")       # 12
    
    a *= 2
    print(f"a *= 2: {a}")       # 24
    
    a //= 3
    print(f"a //= 3: {a}")      # 8
    • 测试 True and False、True or False、not True
    • 用变量测试:a = 10, b = 20,测试 a and b、a or b、not a

    批改(2026-09-28):✅ 正确(False、True、False、20、10、False 全对)。

    - 提示(先自己想,实在想不出再点开)

    一级 · 思路:先拿两个布尔值直接算一遍,再换成两个数字变量算一遍,对比两次的输出 二级 · 方法:and、or、not;输出写 print(f"a and b: {a and b}");留意 and/or 返回的是值本身,not 返回的才是布尔值 三级 · 骨架:print(f"a or b: {a ____ b}") / print(f"not a: {____ a}")

    - 参考答案(做完再点开)

    python
    # 2-4
    print(f"True and False: {True and False}")   # False
    print(f"True or False: {True or False}")     # True
    print(f"not True: {not True}")               # False
    
    a = 10
    b = 20
    print(f"a and b: {a and b}")   # 20(返回最后一个真值)
    print(f"a or b: {a or b}")     # 10(返回第一个真值)
    print(f"not a: {not a}")       # False
    • 创建列表 fruits = ["苹果", "香蕉", "橘子"]
    • 测试 "苹果" in fruits
    • 测试 "西瓜" not in fruits
    • 测试 "香蕉" in fruits

    批改(2026-09-28):✅ 正确("苹果" in fruits、"西瓜" not in fruits、"香蕉" in fruits 三项都输出 True)。

    - 提示(先自己想,实在想不出再点开)

    一级 · 思路:先建一个水果列表,再用成员运算符一项一项判断某个值在不在里面 二级 · 方法:成员运算符 in 和 not in;输出写 print(f"'苹果' in fruits: {'苹果' in fruits}")三级 · 骨架:print(f"'西瓜' not in fruits: {'西瓜' ____ fruits}") / print(f"'香蕉' in fruits: {'香蕉' ____ fruits}")

    - 参考答案(做完再点开)

    python
    # 2-5
    fruits = ["苹果", "香蕉", "橘子"]
    
    print(f"'苹果' in fruits: {'苹果' in fruits}")       # True
    print(f"'西瓜' not in fruits: {'西瓜' not in fruits}")  # True
    print(f"'香蕉' in fruits: {'香蕉' in fruits}")       # True
    • 创建 a = [1, 2, 3],b = a,c = a[:]
    • 测试 a is b、a is c、a == b、a == c
    • 用 id() 查看内存地址

    批改(2026-09-28):✅ 正确(a is b True、a is c False、a == b/a == c True;实测 id(a) 与 id(b) 相同、id(c) 不同)。

    - 提示(先自己想,实在想不出再点开)

    一级 · 思路:b = a 只是给同一个对象又起了一个名字,切片 c = a[:] 才是真的造出一个新对象;用身份运算符比一比,再看两者的内存地址 二级 · 方法:身份运算符 is / is not、相等比较 ==;看内存地址用内置函数 id(对象)三级 · 骨架:print(f"a is c: {a ____ c}") / print(f"id(a): {____(a)}")

    - 参考答案(做完再点开)

    python
    # 2-6
    a = [1, 2, 3]
    b = a
    c = a[:]
    
    print(f"a is b: {a is b}")     # True(同一个对象)
    print(f"a is c: {a is c}")     # False(不同对象)
    print(f"a == b: {a == b}")     # True(值相等)
    print(f"a == c: {a == c}")     # True(值相等)
    
    print(f"id(a): {id(a)}")
    print(f"id(b): {id(b)}")  # 和 a 相同
    print(f"id(c): {id(c)}")  # 和 a 不同