python 工程应用中常见的问题(全局变量;赋值、深拷贝与浅拷贝)
2018-08-29 09:45
155 查看
在一些简单的工程项目中,如果遇见未知出错,可考虑如下情况:
1、自定义函数中,使用的全局变量,而未声明;
2、使用赋值,更改变量,导致原参数变化;
本文主要总结全局变量与局部变量的区别、深拷贝与浅拷贝的区别
全局变量与局部变量
1:简单理解
全局变量: 在函数外部的一级代码中的变量
局部变量:在自定义函数里定义的变量
2:函数内使用全局变量
如果函数内没有定义与全局变量重名的局部变量,在函数内是可以调用该名称的全局变量
name = ‘alex‘ def change_name(): #name = ‘jake‘ print(name) change_name() print(name)
如果函数内部,要修改全局变量,需要声明全局变量: global
(一般情况下不建议使用,因为在这个函数内改了全局变量,可能会影响到其他函数调用该全局变量)
赋值、深拷贝与浅拷贝的区别
浅拷贝
import copy
list1 = [[4,5,6],2,3]
list2 = copy.copy(list1)
#子列表改变
list1[0][0] = 0
print(list2) #[[0, 5, 6], 2, 3]
print(list1) # [[0, 5, 6], 2, 3]
大列表中元素更改
list1[0] = 0
print(list2) #[[4, 5, 6], 2, 3]
print(list1) #[0, 2, 3]
深拷贝
字列表改变
list2 = copy.deepcopy(list1) list1[0][0] = 0 print(list2) #[[4, 5, 6], 2, 3] print(list1) #[[0, 5, 6], 2, 3]
总结
copy 函数开辟了一个新的内存空间;
copy.copy(),当列表中嵌套小列表时候,大列表开辟新内存空间,子列表只是赋值了指引,所以,当子列表更改时候,两个列表同时改变;当大列表中元素更改时候,两个列表互不影响)
copy.deepcopy(), 开辟大空间同时,开辟小空间放字列表
相关文章推荐
- VS中常见bug问题解决方法——iostream.h&全工程的全局变量&光标阴影
- 关于全局变量赋值的问题
- 遇到的问题-----------定义一个全局变量,在page_load里赋值,但在其他按钮中调用仍为空
- 解决Ajax全局变量赋值的问题
- AJAX回调函数内部给全局变量赋值的问题与解决
- 软件破解常见的问题-逆向工程的应用
- 转载:关于C语言头文件的应用问题,主要还是关于全局变量的定义和声明问题
- ajax给全局变量赋值问题解决示例
- Python全局变量在模块之间引用的问题
- JavaScript 之 回调函数的返回值给全局变量赋值问题
- ajax给全局变量赋值问题解决示例
- 软件维护常见问题--更换全局变量名称或对象名称
- 全局变量报错:UnboundLocalError: local variable 'l' referenced before assignment 分类: divide into python python基础学习 问题总结 2014-01-01 16:35 4595人阅读 评论(0)
- 全局变量的定义、声明、应用问题综合
- 软件破解常见的问题-逆向工程的应用
- ajax给全局变量赋值问题
- python的直接赋值不会拷贝,只相当于变量的一个别名
- ajax给全局变量赋值问题
- C常见问题之对结构变量的整体赋值问题