您的位置:首页 > 编程语言 > Python开发

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(), 开辟大空间同时,开辟小空间放字列表

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: