python学习之第十五课时--存址方式及拷贝

不同数据类型在内存中的存址方式

字符串str,一次性创建,不能被修改,只要有修改字符串,就是在重新创建新的字符串

Python底层是c语言写的,c语言没有字符串的说法,字符串是字符数组,所以在内存址是字符数组的方式

图示:

列表list

图示:

copy.copy()浅拷贝:只拷贝第一层,下面的指向的原始地址

copy.deepcopy()深拷贝:除底层的字符串或数字外,其他的上层都拷贝,底层的字符串或数字还是指向的原始地址

注意:在使用拷贝时,必须先引入拷贝模块 import copy

一、数字和字符串

对于 数字 和 字符串 而言,赋值、浅拷贝和深拷贝无意义,因为其永远指向同一个内存地址

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import copy
a=12
b=a
print(id(b))    #打印 36593664
#浅拷贝
b=copy.copy(a)
#深拷贝
c=copy.deepcopy(a)
print(id(c))    #打印 36593664

深拷贝

c= copy.deepcopy(a)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import copy
a=12
b=a
print(id(b))    #打印 36593664
#浅拷贝
b=copy.copy(a)
#深拷贝
c=copy.deepcopy(a)
print(id(c))    #打印 36593664

二、其他基本数据类型

对于字典、元祖、列表 而言,进行赋值、浅拷贝和深拷贝时,其内存地址的变化是不同的

1、赋值

赋值,只是创建一个变量,该变量指向原来内存地址,如:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import copy
b={"zhang":12,"li":34,"wu":[57,22]}
a=b

图示:

2、浅拷贝

浅拷贝,在内存中只额外创建第一层数据

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import copy
b={"zhang":12,"li":34,"wu":[57,22]}
a=b
a=copy.copy(b)

图示:

3、深拷贝

深拷贝,在内存中将所有的数据重新创建一份(排除最后一层,即:python内部对字符串和数字的优化)

#!/usr/bin/env python
# -*- coding:utf-8 -*-
import copy
b={"zhang":12,"li":34,"wu":[57,22]}
c=copy.deepcopy(b)

图示:

时间: 2024-11-06 23:45:27

python学习之第十五课时--存址方式及拷贝的相关文章

python学习之第十五天

本节内容: 项目:开发一个简单的BBS论坛 需求: 整体参考"抽屉新热榜" + "虎嗅网" 实现不同论坛版块 帖子列表展示 帖子评论数.点赞数展示 在线用户展示 允许登录用户发贴.评论.点赞 允许上传文件 帖子可被置顶 可进行多级评论 就先这些吧... 知识必备: Django HTML\CSS\JS BootStrap Jquery 设计表结构 + CSRF(Cross Site Request Forgery, 跨站域请求伪造) CSRF 背景与介绍 CSRF(

python学习笔记-(十五)RabbitMQ队列

rabbitMQ是消息队列:想想之前的我们学过队列queue:threading queue(线程queue,多个线程之间进行数据交互).进程queue(父进程与子进程进行交互或者同属于同一父进程下的多个子进程进行交互):如果两个独立的程序,那么之间是不能通过queue进行交互的,这时候我们就需要一个中间代理即rabbitMQ 消息队列: RabbitMQ ZeroMQ ActiveMQ ........... 一. 安装 1. ubuntu下安装rabbitMQ: 1.1 安装: sudo a

Python学习笔记(十五)用Python获取本地数据

f1 = open(r'E:\Python\Data\data1.txt') #读取data1.txt文件,使用系统默认缓冲区大小, 为了读取快点,使用缓存吧! f = open(r'E:\Python\Data\data2.txt', 'w') f.write('Hello World !') f.close() f = open(r'E:\Python\Data\data2.txt', 'r') p1 = f.read(5) # 先读5个字节 p2 = f.read() # 余下的都读出来f

Python学习笔记(十五)

一.进程与线程 一个操作系统可以有多个进程 一个进程可以有多个线程,且必须有一个线程 二.多进程 from multiprocessing import Process import os # 多进行要运行的函数 def run_proc(name): print("Hello,",name,os.getpid()) if __name__ == "__main__": print("Parent process %s " % os.getpid

python学习之第十六课时--缩进(indentation)

python最具特色的是用缩进来标明成块的代码 我们下面用if选择结构举例,if后面跟随条件,如果条件成立,则执行归属于if的一个代码块 先看c语言的表达方式 if(i>0) { x=1; y=3; } 如果i>0的话,我们将进行括号中所包括的两个赋值语句.括号中包含的就是块操作,它隶属于if 同的目的,在python中,这段话是这样的 if i>0: x=1 y=3 在python中,去掉i>0周围的括号,去除每个语句尾的分号,表示块的花括号也消失了.多出来:(冒号),还有x=1

python学习之第十六课时--函数的作用及定义

例子: 当我们知道半径r的值时,就可以根据公式计算出面积,假设我们需要计算3个不同大小的圆的面积: #!/usr/bin/env python # -*- coding:utf-8 -*- r1=2.34 r2=7.28 r3=10.32 s1=3.14*r1*r1 s2=3.14*r2*r2 s3=3.14*r3*r3 当代码有规律的重复的时候,每次写3.14*x*x不仅很麻烦,而且如果要把3.14改成3.14159的时候得全部替换 有了函数,我们不再每次写s=3.14*x*x,而是写成更有意

python学习第六十五天:前端知识点总结

前端知识点串讲 1 HTML 1.1 组成 HTML标签: 单 双 HTML标签属性 class id 1.2 HTML标签 # 页面结构标签 html body head # HEAD 头部标签 meta title style link script # 格式标签 p h1~6 pre br hr # 文本标签 em strong sub sup del ins i # 列表 ul ol li dl dt dd # 表格 table thead tbody tfoot tr td th ca

python学习第七十五天:多表查询

创建模型 class Book(models.Model): nid = models.AutoField(primary_key=True) name = models.CharField(max_length=32) price = models.DecimalField(max_digits=5, decimal_places=2) publish_date = models.DateField() # 阅读数 reat_num=models.IntegerField(default=0)

Python学习日记(三十五) Mysql数据库篇 三

使用Navicate 创建一个连接去使用Mysql的数据库,连接名可以取任意字符但是要有意义 新增一个数据库 填写新数据库名,设置它的字符集和排序规则 新建一个表 增加表中的信息 点击保存再去输入表名完成创建,再添加数据: 使用外键将两表产生联系 再创建一个department表 添加数据: 创建外键,右键userinfo设计表创建外键: 写入SQL语句 点击查询->新建查询 转储SQL文件 将SQL文件进行备份 保存数据和结构 保存结构 使用终端进行转储 保存数据和结构(备份) 保存结构(备份