Python 代码分析面试题, 假设你使用的是官方的 CPython,说出下面代码的运行结果
Python 代码分析面试题, 假设你使用的是官方的 CPython,说出下面代码的运行结果
QA
Step 1
Q:: 题目:
下面代码的运行结果是什么?
x = [1, 2, 3]
y = x
x[0] = 0
print(y)
A:: 答案: [0, 2, 3]
解释:
在Python中,列表是可变的对象。当我们将列表x
赋值给y
时,y
指向的是同一个列表对象。所以,当我们修改x
中的值时,y
也会反映出这个变化。
Step 2
Q:: 题目:
下面代码的运行结果是什么?
x = [1, 2, 3]
y = x[:]
x[0] = 0
print(y)
A:: 答案: [1, 2, 3]
解释:
通过x[:]
的切片操作创建了一个新的列表y
,这个列表与x
是不同的对象。因此,当我们修改x
中的值时,y
不会受到影响。
Step 3
Q:: 题目:
下面代码的运行结果是什么?
x = (1, 2, 3)
y = x
x = (0, 2, 3)
print(y)
A:: 答案: (1, 2, 3)
解释:
元组是不可变的对象。当我们将元组x
赋值给y
时,y
指向的是同一个元组对象。后续我们重新赋值x
,这只是让x
指向一个新的元组对象,而y
仍然指向原来的元组。
Step 4
Q:: 题目:
下面代码的运行结果是什么?
class MyClass:
def __init__(self, value=0):
self.value = value
obj1 = MyClass()
obj2 = obj1
obj2.value = 42
print(obj1.value)
A:: 答案: 42
解释:
在Python中,对象是通过引用传递的。当我们将obj1
赋值给obj2
时,obj2
指向的是同一个对象。所以,当我们修改obj2
的属性时,obj1
的属性也会随之改变。
用途
这些面试题旨在测试候选人对Python中对象、变量赋值、可变对象与不可变对象等概念的理解。这些知识在实际生产环境中非常重要,因为它们涉及到内存管理、数据传递和对象的修改。如果不理解这些概念,可能会导致代码中出现难以发现的bug,尤其是在处理复杂数据结构和并发编程时。\n相关问题
🦆
题目: 在Python中,is和==运算符有什么区别?▷
🦆
题目: 如何在Python中拷贝一个列表?▷
🦆
题目: 请解释Python中的垃圾回收机制.▷
🦆
题目: 请解释Python中的装饰器以及它们的用途.▷
🦆
题目: 在Python中,生成器和迭代器有什么区别?▷