interview
python-code-analysis
假设你使用的是官方的 CPython说出下面代码的运行结果

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和==运算符有什么区别?

答案: is运算符比较两个对象的身份(id),即它们是否是同一个对象;而==运算符比较两个对象的值是否相等。例如:a is b返回True表示ab是同一个对象,a == b返回True表示ab的值相等。

🦆
题目: 如何在Python中拷贝一个列表?

答案: 可以使用多种方法来拷贝一个列表,例如:切片操作new_list = old_list[:],使用list构造函数new_list = list(old_list),使用copy模块中的copy函数import copy; new_list = copy.copy(old_list)等。

🦆
题目: 请解释Python中的垃圾回收机制.

答案: Python使用引用计数和垃圾回收机制来管理内存。当对象的引用计数为零时,内存会被释放。此外,Python还采用了循环垃圾收集器来处理引用循环,这样可以回收那些被引用循环占用的内存。

🦆
题目: 请解释Python中的装饰器以及它们的用途.

答案: 装饰器是一个高阶函数,它接受一个函数作为输入并返回一个新的函数。装饰器通常用于在不改变原函数代码的情况下,添加额外的功能,例如日志记录、性能计时、访问控制等。使用@decorator_name语法可以方便地应用装饰器。

🦆
题目: 在Python中,生成器和迭代器有什么区别?

答案: 迭代器是一个实现了__iter____next__方法的对象,可以用来逐个遍历元素。生成器是一种特殊的迭代器,通过使用yield关键字的函数来创建。生成器在生成值时会暂停函数的执行状态,并在需要时恢复。