python中的深浅拷贝
拷贝我们可以先理解为一个赋值的概念
举例:①
# a = 1
# b = a
# print(a) #运行结果为:1
# print(b) #运行结果为:1
# print(id(a)) #运行结果为:140730443784848
# print(id(b)) #运行结果为:140730443784848
举例:②
# a = [1,2,3]
# c = a
# a[0] = 'hellow'
# print(a) #运行结果为:['hellow', 2, 3]
# print(c) #运行结果为:['hellow', 2, 3]
# print(id(a)) #运行结果为:2489402811016
# print(id(c)) #运行结果为:2489402811016
#举例:③
import copy #导入copy这个模块
#第一步操作如下:
# a = [1,2,3]
# b = copy.copy(a)
# print(a) #运行结果为:[1, 2, 3]
# print(b) #运行结果为:[1, 2, 3]
# print(id(a)) #运行结果为:1530612734536
# print(id(b)) #运行结果为:1530611558216
#第一步备注如下:
# 1、copy.copy()这个方法是浅拷贝
#2、通过打印结果可以看到当b的值是通过浅拷贝a的值时候,a和b的存储地址不一样
#3、可以理解为a的值在内存中有一块存储地址,b通过浅拷贝a的值后会在内存新开辟一块内存地址
第二步操作如下:
# a = [1,2,3]
# b = copy.copy(a)
# a[0] = 'hellow'
# print(a) #运行结果为:['hellow', 2, 3]
# print(b) #运行结果为:[1, 2, 3]
# print(id(a)) #运行结果为:2257773640520
# print(id(b)) #运行结果为:2257773520840
第二步备注如下:
1、通过索引修改a里面的某个元素的值,查看a的结果发现已经发生改变
2、通过索引修改a里面的某个元素的值,查看b的结果发现无任何改变
3、由于当b通过浅拷贝a后值存储的地址和a存储的地址不是同一地址,所 以a和b任何一方修改里面元素的值都不会影响对方,可以理解为两个人已经离婚了,没有任何瓜葛。
# 举例:④
# a = [[1,2,3],[4,5,6]]
# b = copy.copy(a)
# print(a) #运行结果:[[1, 2, 3], [4, 5, 6]]
# print(id(a)) #运行结果为:2559396978312
# print(b) #运行结果:[[1, 2, 3], [4, 5, 6]]
# print(id(b)) #运行结果:2559397186504
# a[0][0] = 'hellow'
# print(a) #运行结果为:[['hellow', 2, 3], [4, 5, 6]]
# print(b) #运行结果为:[['hellow', 2, 3], [4, 5, 6]]
④备注如下:
# 1、当列表里面包含列表的时候用copy.copy()浅拷贝这个方法有特殊情况
# 2、相当于b整体开辟了一个新的内存地址,但是b里面的列表内存地址还是引用a里面的列表内存地址,所以当a修改a里面列表元素的值时候,b也会发生改变,因为b里面的列表和a里面的列表指定同一块内存地址。可以理解为两个人离婚了,由于还有孩子,所以还藕断丝涟
# 举例:⑤
# a = [[1,2,3],[4,5,6]]
# b = copy.deepcopy(a)
# print(a) #运行结果:[[1, 2, 3], [4, 5, 6]]
# print(id(a)) #运行结果为:2559396978312
# print(b) #运行结果:[[1, 2, 3], [4, 5, 6]]
# print(id(b)) #运行结果:2559397186504
# a[0][0] = 'hellow'
# print(a) #运行结果为:[['hellow', 2, 3], [4, 5, 6]]
# print(b) #运行结果为:[[1, 2, 3], [4, 5, 6]]
# ⑤备注如下:
# 1、当b使用copy.deepcopy()深拷贝的时候,可以理解为b不仅外面的整体开辟了一个新的内存地址,b里面包含的列表也开辟了新的内存地址和a里面的内存地址没有任何关系,所以当a修改里面列表元素的值时不会影响b里面列表元素的值。可以理解为:两个人已经离婚了,由于没有孩子,所以没有任何瓜葛了
Python相关
一、熟练掌握python及pycharm的配置及安装
二、Python定义
Python是一门面向对象,解释型的动态类型的编程语言,有Guido van Rossunm(吉多 * 范罗苏姆)于1989年发明,第一个公开版发行于Guido van Rossunm #吉多·范罗苏姆 荷兰计算机程序员
三、Python特点
python被称为“胶水语言”
a.特点:简单、易学、免费开 源、可扩展性、可移植、高级语言、丰富的类库;
b.应用领域:网页开发、可视化界面开发、系统编程、数据分析、网络爬虫(用的多)、自动化脚本开发(测试用的多); java,ruby 、数据分析、AI人工智能、大数据、云计算、。
解释型:Python程序执行时无需先进行编译成二进制代码,直接在执行过程中对语句一条条进行编译
四、Python的不同点:
胶水语言、输出语句(print)、注释(Ctrl+/、#、’’’)
格式化输出:基本格式:('%d'%a)
%s :字符串 (采用str()的显示)
%c :单个字符
%d:十进制整数
%i :十进制整数
%o:八进制整数
%x:十六进制整数
%f:浮点数
%% :百分数
常用的运算操作:算术运算(加减乘除)、赋值运算(+=)、比较运算、逻辑运算、位运算、成员运算(in、not in)
五、python2和python3的不同点
1.Python3.X源码文件默认使用utf-8编码,而python2.x的编译最前端需要加上#coding=utf-8
2.python3.x里打印print后面需要有括号,而在python2.x里打印print后面可以加括号也可以不加
3.在python2.x里是raw_input和input函数 ,而在python3.x里面2个函数的功能合并为input函数了。
4.在python2.x当中传统除法只取整数,python3.x传统除法会显示小数点后小数位
5.python2中sort函数可以将整型和字符串放在一起排序、python3里面只能将整型和整型、字符串和字符串
分开进行排序
6.python2列表中有中文直接打印会显示被转义了需要通过str(list1).decode('string_escape')进行转码
但是在python3里面列表中有中文可以直接打印出来
7.在python2里面字典的键不可以为整型、python3里面是可以的
8.在python2里面取字典的键通过print dict1.keys()、python3里面print(dict1.keys())
运行的结果为:dict_keys(['name', 'age'])、必须要通过for循环来取
for i in dict1.keys():
print(i)
9.python2字典中的has_key函数判断键是否存在字典里面、在python3当中用__contains__函数给替代了
语法为:print(dict1.__contains__('name'))或者用if 'name' in dict1:
10.python2中的三目运算是name = input('请输入您的用户名:') print '在上海' if name == 'admin' else '在深圳'
python3中是:name = input('请输入您的用户名:') 6print ('在上海') if name == 'admin' else print('在深圳')
11.python2中执行print range(10)返回的是列表数据如:[0,1,2,3,4,5,6,7,8,9]
python3中执行print(range(10))返回的数据是:range(0, 10)
12.python2里面print 100/2打印结果为50数据类型是int整型
python3里面print(100/2)打印结果为50.0数据类型是float浮点型
13.python2里面zip函数
list1 = ['name','class','age','score']
list2 = ['duoceshi