Gitlib Gitlib
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)

Ravior

以梦为马,莫负韶华
首页
  • 分类
  • 标签
  • 归档
  • Golang开发实践万字总结
  • MySQL核心知识汇总
  • Redis实践总结
  • MQ实践万字总结
  • Docker数据持久化总结
  • Docker网络模式深度解读
  • 常用游戏反外挂技术总结
  • 读书笔记
  • 心情杂货
  • 行业杂谈
  • 友情链接
关于我
GitHub (opens new window)
  • PHP

  • Golang

  • Python

    • Python使用lambda表达式
    • Python之线程池
    • Python之装饰器
    • Python之chardet模块使用
    • Python之copy模块使用
      • 浅拷贝
      • 深拷贝
    • Python之functools模块使用
    • Python之hashlib模块使用
    • Python之json模块使用
    • Python之pickle模块使用
    • Python之pid模块使用
    • Python之pypinyin模块使用
    • Python之pyqrcode模块使用
    • Python之threading模块使用
    • Python之base64模块使用
    • Python项目Docker打包
  • Javascript

  • 其他语言

  • 编程语言
  • Python
Ravior
2014-01-12
目录

Python之copy模块使用

在python中,无论是直接的变量赋值,还是参数传递,都是按照引用进行赋值的,所以在日常开发过程中,我们经常需要用到对象拷贝功能。

copy模块则提供了浅拷贝和深拷贝功能。

  • **浅拷贝:**obj.copy()
  • **深拷贝:**obj.deepcopy()

# 浅拷贝

**浅拷贝:**只拷贝第一层的数据

# encoding=utf-8
# copy 复制对象

import logging
import copy

logging.basicConfig(level = logging.DEBUG, format='%(levelname)s - %(message)s')

logger = logging.getLogger(__name__)


obj = {
	"name":"myname",
	"phone": {
		"home":"123456"
	}
}

# 浅拷贝
obj1 = copy.copy(obj);
obj1['name'] = "gitlib";

obj['phone']['home'] ="456789";

logger.debug(obj)
logger.debug(obj1)
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

输出结果:

DEBUG - {'phone': {'home': '456789'}, 'name': 'myname'}
DEBUG - {'phone': {'home': '456789'}, 'name': 'gitlib'}
1
2

因为浅拷贝只拷贝了第一层数据,其他层级数据还是引用原始对象的,所以改变原始对象的数据,浅拷贝的对象非第一层数据也会发生变化。

# 深拷贝

**深拷贝:**递归拷贝没一层的数据

# encoding=utf-8
# copy 复制对象

import logging
import copy

logging.basicConfig(level = logging.DEBUG, format='%(levelname)s - %(message)s')

logger = logging.getLogger(__name__)


obj = {
	"name":"myname",
	"phone": {
		"home":"123456"
	}
}

# 深拷贝
obj1 = copy.deepcopy(obj);
obj1['name'] = "gitlib";
obj1['phone']['home'] ="456789";

logger.debug(obj)
logger.debug(obj1)
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

输出结果:

DEBUG - {'phone': {'home': '123456'}, 'name': 'myname'}
DEBUG - {'phone': {'home': '456789'}, 'name': 'gitlib'}
1
2

可以看出,深拷贝之后的对象和原对象完全独立。

#Python
上次更新: 2022/12/01, 11:09:34
Python之chardet模块使用
Python之functools模块使用

← Python之chardet模块使用 Python之functools模块使用→

最近更新
01
常用游戏反外挂技术总结
11-27
02
Golang开发实践万字总结
11-11
03
Redis万字总结
10-30
更多文章>
Theme by Vdoing | Copyright © 2011-2022 Ravior | 粤ICP备17060229号-3 | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式