PYTHON 深拷贝浅拷贝等等
进入python交互模式
1 | # python |
在输出结果中可以看到import导包时直接查找的一些路径。
可以使用 sys.path.append(“/home”) 把/home路径加入搜索路径
模块重新导入
修改模块之后,加入新功能,需要重新导入模块- from imp import *
- reload(test)
- 重新加载即可
导包应该避免循环导入
python3 == 和 is 判断内容的时候用 == 来判断两个值是否相同,判断是否同一个的时候用is
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2311,22,33] a = [
11,22,33] b = [
a == b
True
is b a
False
id(a)
4308094128
id(b)
4308230800
c = a
id(c)
4308094128
22] c= [
a
[11, 22, 33]
id(c)
4308230944
id(a)
4308094128
is c a
False
>>>深拷贝、浅拷贝
1 | a = [11,22,33] |
- 当我们不想进行值共享的时候的拷贝应该用深拷贝。
1 | a = [11,22,33] |
既然拷贝的是内容,那么深拷贝却没有拷贝c里面的引用,这是因为递归拷贝,就是如果里面存的是引用就会继续拷贝。
如果想要拷贝引用,不进行递归拷贝,仅仅拷贝第一层,则可使用 e = copy.copy(a)
例如:
1 | >>> |
例: 出现这个问题:是因为 在负几到100多之间,是公用的。
1 | a = 100 |
私有化
- xx :公有变量
- _x: 单前置下划线,私有化属性或方法,from module import * 禁止导入,类对象和子类可以访问
- __xx: 双前置下划线,避免与子类中的属性命名冲突,无法再外部直接访问(名字重整所以访问不到),表示私有。
- xx:双前后下划线,用户名字空间的魔法对象或属性。例如 init 系统给的,一般不要这么给自己的变量起名
- xx_:单后置下划线,用于避免与Python关键词的冲突
- 通过name mangling (名字重整(目的就是以防子类意外重写基类的方法或者属性)如_Class__object)机制就可以访问private了。python自动把变量名改了,所以就用不到私有变量了,可以通过 _类名__num 来访问。
私有属性使用property升级getter和setter方法
1 | class Test(object): |
property 用法二:
1 | class Money(object): |