MST

星途 面试题库

面试题:Python多变量赋值原子性验证基础

在Python中,如何通过简单示例验证多变量赋值是否具有原子性?请写出代码并解释其原理。
39.2万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

代码示例

import threading

a = 0
b = 0

def change_values():
    global a, b
    a, b = 1, 2

threads = []
for _ in range(100):
    t = threading.Thread(target=change_values)
    threads.append(t)
    t.start()

for t in threads:
    t.join()

print(f"a: {a}, b: {b}")

原理解释

  1. 多变量赋值原子性含义:原子性操作是指不会被线程调度机制打断的操作,一旦开始,就一直运行到结束,中间不会有任何上下文切换。在Python中,多变量赋值 a, b = 1, 2 理论上是原子性的。
  2. 代码验证逻辑
    • 定义了全局变量 ab 初始值都为 0
    • change_values 函数对 ab 进行多变量赋值 a, b = 1, 2
    • 创建100个线程同时执行 change_values 函数。如果多变量赋值不是原子性的,在多线程环境下,可能会出现 ab 的值不一致的情况,比如 a 被赋值为 1b 还没来得及被赋值为 2 就被其他线程打断。
    • 最后通过打印 ab 的值来验证。如果每次运行程序,a 总是 1b 总是 2,则说明多变量赋值在Python中是原子性的。实际上,由于Python的CPython解释器的实现机制,多变量赋值在字节码层面是原子性操作,在这个测试中,ab 的值总会被正确赋值。