python中的深浅拷贝以及总体框架了解

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值