不做大哥好多年 不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核

逍遥子

不做大哥好多年
首页
  • MySQL
  • Redis
  • Elasticsearch
  • Kafka
  • Etcd
  • MongoDB
  • TiDB
  • RabbitMQ
  • 01.GO基础
  • 02.面向对象
  • 03.并发编程
  • 04.常用库
  • 05.数据库操作
  • 06.Beego框架
  • 07.Beego商城
  • 08.GIN框架
  • 09.GIN论坛
  • 10.微服务
  • 01.Python基础
  • 02.Python模块
  • 03.Django
  • 04.Flask
  • 05.SYL
  • 06.Celery
  • 10.微服务
  • 01.Java基础
  • 02.面向对象
  • 03.Java进阶
  • 04.Web基础
  • 05.Spring框架
  • 100.微服务
  • Docker
  • K8S
  • 容器原理
  • Istio
  • 数据结构
  • 算法基础
  • 算法题分类
  • 前置知识
  • PyTorch
  • 01.Python
  • 02.GO
  • 03.Java
  • 04.业务问题
  • 05.关键技术
  • 06.项目常识
  • 10.计算机基础
  • Linux基础
  • Linux高级
  • Nginx
  • KeepAlive
  • ansible
  • zabbix
  • Shell
  • Linux内核
  • python基础

    • 01.列表
    • 02.字符串
    • 03.字典
    • 04.集合
    • 05.进程
    • 06.线程
    • 07.协程
    • 08.select、poll、epoll
    • 09.装饰器
    • 10.生成器和迭代器
    • 11.面向对象
    • 12.深浅拷贝
      • 01.深浅拷贝
      • 02.变量及其存储
      • 03.is和==区别
        • 3.1 is和==区别
        • 3.2 小数据池
        • 3.3 代码块概念
    • 13.垃圾回收
    • 14.上下文管理
    • 15.网络七层
    • 16.高阶函数
    • 17.次重点
  • python模块

  • django

  • flask

  • SYL

  • Celery

  • 微服务

  • python
  • python基础
xiaonaiqiang
2021-02-11
目录

12.深浅拷贝

# 01.深浅拷贝

  • 浅copy与deepcopy(What)

    • 浅copy: 不管多么复杂的数据结构,浅拷贝都只会copy一层
    • deepcopy : 深拷贝会完全复制原变量相关的所有数据,在内存中生成一套完全一样的内容,我们对这两个变量中任意一个修改都不会影响其他变量
  • import copy
    sourceList = [1,2,3,[4,5,6]]
    copyList = copy.copy(sourceList)
    deepcopyList = copy.deepcopy(sourceList)
    
    sourceList[3][0]=100
    
    print(sourceList)           # [1, 2, 3, [100, 5, 6]]
    print(copyList)             # [1, 2, 3, [100, 5, 6]]
    print(deepcopyList)         # [1, 2, 3, [4, 5, 6]]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10

image-20200311090206377.png

  • 案例
import copy
a = [1,2,3,4,['a','b']]
b = a
c = copy.copy(a)
d = copy.deepcopy(a)
a.append(5)
a[4].append('c')
print(a)     # [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(b)     # [1, 2, 3, 4, ['a', 'b', 'c'], 5]
print(c)     # [1, 2, 3, 4, ['a', 'b', 'c']]
print(d)     # [1, 2, 3, 4, ['a', 'b']]
1
2
3
4
5
6
7
8
9
10
11

# 02.变量及其存储

    1. python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不是这个变量的只本身
    1. 不管多么复杂的数据结构,浅拷贝都只会copy一层。
  • 理解:两个人公用一张桌子,只要桌子不变,桌子上的菜发生了变化两个人是共同感受的。

>>> str1 = 'hello'
>>> str2 = str1

#1、让str1和str2变量都存储了‘hello’所在的内存地址
>>> id(str1)
22748280
>>> id(str1)
22748280
>>>

#2、当str1的值变成‘new hello’后str1的值被重新赋值成'new hello'的内存地址,而str2的值依旧是‘hello’的内存地址
>>> str1 = 'new hello'
>>> id(str1)
22748320
>>> id(str2)
22748280

#3、不管多么复杂的数据结构,浅拷贝都只会copy一层。
>>> sourceList = [1,2,[3,4]]
>>> newList = sourceList

>>> l[2][0]=100

>>> sourceList
[1, 2, [100, 4]]
>>> newList
[1, 2, [100, 4]]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 03.is和==区别

参考 (opens new window)

# 3.1 is和==区别

  • is不仅数据一样内存地址也一样
  • == 只判断数据和数据类型一样即可

# 3.2 小数据池

  • 1)int
    • 那么大家都知道对于整数来说,小数据池的范围是-5~256
    • 如果多个变量都是指向同一个(在这个范围内的)数字,他们在内存中指向的都是一个内存地址。
>>> a1 = 256
>>> a2 = 256
>>> a1 is a2
True

>>> b1 = 257
>>> b2 = 257
>>> b1 is b2
False
1
2
3
4
5
6
7
8
9
  • 2)字符串
    • 字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留
    • 字符串的长度>1,切包含特殊字符串,默认不会驻留
'''字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留'''
>>> b1 = 'abcedf'
>>> b2 = 'abcedf'
>>> b1 is b2
True

'''如果包含特殊字符串,不会默认驻留'''
>>> c1 = '@abc'
>>> c2 = '@abc'
>>> c1 is c2
False
1
2
3
4
5
6
7
8
9
10
11

# 3.3 代码块概念

  • Python程序是由代码块构造的,块是一个python程序的文本,他是作为一个单元执行的。

  • 代码块:一个模块,一个函数,一个类,一个文件等都是一个代码块。

  • 而作为交互方式输入的每个命令都是一个代码块。

  • 交互模式

  • 脚本中

上次更新: 2024/3/13 15:35:10
11.面向对象
13.垃圾回收

← 11.面向对象 13.垃圾回收→

最近更新
01
04.数组双指针排序_子数组
03-25
02
08.动态规划
03-25
03
06.回溯算法
03-25
更多文章>
Theme by Vdoing | Copyright © 2019-2025 逍遥子 技术博客 京ICP备2021005373号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式