python-10
深浅拷贝:
1 # 2 #浅拷贝 copy() 3 # 4 a = [[1,2],3,4] 5 b = a.copy() 6 b[1] = 5 7 b[0][0] = 7 8 print(b)# [[7, 2], 5, 4] 9 print(a)# [[7, 2], 3, 4] 10 # a与b为什么会这样呢? 11 # 1.浅拷贝只能拷贝一层的东西 12 # 2.将a的一层一模一样拷贝给b了 13 # 3.给b的非列表元素重新赋值的话,会在内存中新开辟内存空间,并将地址指向该新内存空间 14 # 4.但是给列表元素赋值的时候列表本身的指向是不变的,但是列表中的元素的指向如果被重新赋值, 15 # 指向虽然变了,但是列表本身的地址没变 所以a中列表元素的值也会从列表额地址中去找元素的值,所以导致a的值也被改变了
1 # 2 #深度拷贝 copy() 3 # 4 import copy 5 a = [[1,2],3,4] 6 b =copy.copy(a) #等同于 a.copy()浅拷贝 7 c =copy.deepcopy(a) #深拷贝 8 c[0][0] =8 9 print(c) #[[8, 2], 3, 4] 10 print(a) #[[1, 2], 3, 4] 11 12 #深度拷贝 13 #主要需要引入模块 import copy 14 #注意语法
1 # 2 #共享 3 # 4 a = [[1,2],3,4] 5 b = a 6 b[0][0] =8 7 b[2] = 9 8 print(b) #[[8, 2], 3, 9] 9 print(a) #[[8, 2], 3, 9] 10 11 # 这种直接赋值的方式为内存地址共享 12 # b并没有单独创建一个内存空间,而是共同引用a 的内存地址
具体的函数知识点详情看链接:
http://www.cnblogs.com/yuanchenqi/articles/5828233.html
1 # 函数 与 变量值的修改 2 # 变量的调用不能在声明之前进行 3 # 局部的变量 4 # 在局部变量中定义一个全局变量的同名变量,程序会认为这个局部同名变量是一个新变量 5 # 如果要在局部变量中修改全局变量的话,需要用global 关键字声明该变量为全局变量 6 # 在函数体内部,如果对全局变量重新声明的话,必须要在调用该全局变量之前声明
1 count =10 2 def d(): 3 count= 20 4 print(count) 5 d() # 20 6 print(count) # 10
1 count =10 2 def d(): 3 print(count) 4 global count 5 count= 20 6 print(count) 7 #该程序执行会报错