每日Python面试题(十)

134 阅读3分钟

各位看官老爷👵👴,咱们今天要聊的,是三个Python面试里老常见的问题👨‍💻。首先,啥是Python深拷贝和浅拷贝?其次,来说说Python的垃圾回收机制。最后,咱们探讨一下类变量和实例变量的区别。在文章的尾声,咱们还会简单说说这些知识点对于开发者实践的重要意义。

什么是Python深拷贝和浅拷贝?

在Python中,复制对象时通常会遇到深拷贝和浅拷贝的概念。浅拷贝创建一个新对象,但它会使用原始对象中的对象引用。如果原始对象包含了任何对其他对象的引用,浅拷贝不会复制这些内部对象,而是复制引用。因此,如果内部对象被修改,这些改变也会体现在浅拷贝的对象上。可以用copy模块的copy()函数来实现浅拷贝。

深拷贝,相反,会复制原始对象中的所有对象,包括多层嵌套的对象。深拷贝会递归复制原始对象中的每一个对象,因此,原始对象和它的深拷贝是完全独立的。使用copy模块的deepcopy()函数可以实现深拷贝。

比如说,假设有个列表里面套着另一个列表,浅拷贝这个列表只会复制最外层的列表,里面的列表仍然是共享的。但深拷贝会连同里面的列表一起复制,彻底分离两个对象。

说说Python的垃圾回收机制

Python使用的主要垃圾回收算法是引用计数。每个对象都有一个引用计数,用来跟踪有多少个引用指向自己。当一个对象的引用计数降到0时,意味着这个对象不再被需要,Python就会自动释放它占用的内存。

除此之外,Python还有一个循环垃圾收集器来处理循环引用的情况。循环引用发生在两个或两个以上的对象相互引用,但它们之外没有任何其他引用指向它们。这种情况下,即使它们的引用计数不为0,这些对象也应该被回收。Python的垃圾回收机制会定期运行,检测并清除这些循环引用。

垃圾回收机制让开发者不需要手动管理内存,但了解其工作原理有助于优化程序性能和避免内存泄漏。

类变量和实例变量的区别?

类变量是属于类的变量,它被类的所有实例共享。这意味着,如果任何一个实例修改了类变量,这个修改会反映在所有其他实例上。类变量通常用于定义所有实例共有的属性或方法。

实例变量则属于类的单个实例。每个对象可以有自己的实例变量,这些变量互不影响。实例变量用于存储每个对象独有的状态。

举个栗子🌰,如果说类是一本菜谱,那类变量就是菜谱上的固定用量(比如盐要放5克),而实例变量就是你做的每道菜实际放的盐量,可能你今天心情好放了6克,明天心情不好放了4克。

启发和启示

弄懂这三个面试题对于开发者实践意义重大。深浅拷贝的理解有助于在处理复杂数据结构时避免出现意外的修改。垃圾回收机制的知识让开发者可以更好地管理内存使用,避免内存泄漏。而区分类变量和实例变量,有助于正确设计类的结构,使代码更加清晰、高效。

所以,了解这些概念,不仅仅是为了面试👔,更是为了在日常开发中写出更优雅、更高效、更稳定的代码🚀。