Python编程答问
原文大多首发于知乎。
如何进行字母频率统计?#
【答】
1 2 3 |
|
复制列表x为y,为什么改动x的时候,y也会变?#
【答】
浅拷贝一个列表,只是拷贝列表内第一层各元素的引用。如果这些引用指向的是可变对象(可以原址改动),那么此对象的更改会影响前后两个列表。
与此不同,深拷贝copy.deepcopy()
能拷贝各层对象的值,获得独立的拷贝。
可变数据类型可以“原址改动”是说,改动后内存地址不变,不影响跟它绑定的所有变量;而一个绑定到不可变数据的变量一旦“改动”,就是重新绑定到一个新建的地址(新建或重用的地址;原址如果还有绑定则保留,如果没有则准备回收)。
不可变数据类型主要包括数值(int、float、bool)、字符串和元组,可变数据类型包括列表、字典等。
有些编辑器(如Thonny、VS Code的Jupyter Notebook模式)可以跟踪堆栈的地址和值。