我是出于纯粹的兴趣和好奇而问的。我有以下代码:
students = ["Smith", "Jacob", "Susan"]
def enroll(student: str, uni_students: list[str]) -> None:
global students
students = ["Carol", "James"]
uni_students.append(student)
enroll("Vanessa", students)
print(students)
产生以下输出:
['Carol', 'James']
我知道 Python 的评估策略是通过共享调用,在这种情况下,这意味着既不是副本也不是引用,而只是对students
对象的访问被传递给enroll(...)
函数。在引用全局students
并从函数范围内重新绑定它之后,我希望 的值uni_students
也会改变,但它保持不变 -["Smith", "Jacob", "Susan"]
函数执行完成后,本地范围内的所有名称当然都被销毁,留下students
具有值['Carol', 'James']
。
有人对此有任何解释吗?谢谢!