Python - 浅拷贝的四种实现方式
时间:2021-08-01
本文章向大家介绍Python - 浅拷贝的四种实现方式,主要包括Python - 浅拷贝的四种实现方式使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
浅拷贝详解
https://www.cnblogs.com/poloyy/p/15084277.html
方式一:使用切片 [:]
列表
# 浅拷贝 [:] old_list = [1, 2, [3, 4]] new_list = old_list[:] old_list.append(5) old_list[2][0] += 97 print("Old list:", old_list, "old list id:", id(old_list), " old list[0] id:", id(old_list[2])) print("new list:", new_list, "new list id:", id(new_list), " new list[0] id:", id(new_list[2])) # 输出结果 Old list: [1, 2, [100, 4], 5] old list id: 4537660608 old list[0] id: 4537659840 new list: [1, 2, [100, 4]] new list id: 4537711424 new list[0] id: 4537659840
方式二:使用工厂函数
工厂函数简介
- 工厂函数看上去像函数,但实际是一个类
- 调用时,生成该数据类型类型的一个实例
可变对象的工厂函数
- list()
- set()
- dict()
列表
# 浅拷贝 工厂函数 old_list = [1, 2, [3, 4]] new_list = list(old_list) old_list.append(5) old_list[2][0] += 97 print("Old list:", old_list, "old list id:", id(old_list), " old list[0] id:", id(old_list[2])) print("new list:", new_list, "new list id:", id(new_list), " new list[0] id:", id(new_list[2]))
集合
# 浅拷贝 工厂函数-集合 old_set = {1, 2, 3} new_set = set(old_set) old_set.add(4) print("Old set:", old_set, "old set id:", id(old_set)) print("new set:", new_set, "new set id:", id(new_set)) # 输出结果 Old set: {1, 2, 3, 4} old set id: 4484723648 new set: {1, 2, 3} new set id: 4484723872
字典
# 浅拷贝 工厂函数-字典 old_dict = {"name": "小菠萝"} new_dict = dict(old_dict) old_dict["second"] = "测试笔记" print("Old dict:", old_dict, "old dict id:", id(old_dict)) print("new dict:", new_dict, "new dict id:", id(new_dict)) # 输出结果 Old dict: {'name': '小菠萝', 'second': '测试笔记'} old dict id: 4514161536 new dict: {'name': '小菠萝'} new dict id: 4515690304
方式三:使用数据类型自带的 copy 方法
列表
# 浅拷贝 自带的copy方法-列表 old_list = [1, 2, [3, 4]] new_list = old_list.copy() old_list.append(5) old_list[2][0] += 97 print("Old list:", old_list, "old list id:", id(old_list), " old list[0] id:", id(old_list[2])) print("new list:", new_list, "new list id:", id(new_list), " new list[0] id:", id(new_list[2])) # 输出结果 Old list: [1, 2, [100, 4], 5] old list id: 4309832000 old list[0] id: 4310372992 new list: [1, 2, [100, 4]] new list id: 4309735296 new list[0] id: 4310372992
集合
# 浅拷贝 自带的copy方法-集合 old_set = {1, 2, 3} new_set = old_set.copy() old_set.add(4) print("Old set:", old_set, "old set id:", id(old_set)) print("new set:", new_set, "new set id:", id(new_set)) # 输出结果 Old set: {1, 2, 3, 4} old set id: 4309931392 new set: {1, 2, 3} new set id: 4309930944
字典
# 浅拷贝 自带的copy方法-字典 old_dict = {"name": "小菠萝"} new_dict = old_dict.copy() old_dict["second"] = "测试笔记" print("Old dict:", old_dict, "old dict id:", id(old_dict)) print("new dict:", new_dict, "new dict id:", id(new_dict)) # 输出结果 Old dict: {'name': '小菠萝', 'second': '测试笔记'} old dict id: 4308452288 new dict: {'name': '小菠萝'} new dict id: 4308452224
源码
def copy(self, *args, **kwargs): # real signature unknown """ Return a shallow copy of the list. """ pass
已经写的很清楚,这是浅拷贝
方式四:使用 copy 模块的 copy 方法
列表
# 浅拷贝 copy模块的copy方法-列表 from copy import copy old_list = [1, 2, [3, 4]] new_list = copy(old_list) old_list.append(5) old_list[2][0] += 97 print("Old list:", old_list, "old list id:", id(old_list), " old list[0] id:", id(old_list[2])) print("new list:", new_list, "new list id:", id(new_list), " new list[0] id:", id(new_list[2])) # 输出结果 Old list: [1, 2, [100, 4], 5] old list id: 4381013184 old list[0] id: 4381159936 new list: [1, 2, [100, 4]] new list id: 4381012800 new list[0] id: 4381159936
集合
# 浅拷贝 copy模块的copy方法-集合 from copy import copy old_set = {1, 2, 3} new_set = copy(old_set) old_set.add(4) print("Old set:", old_set, "old set id:", id(old_set)) print("new set:", new_set, "new set id:", id(new_set)) # 输出结果 Old set: {1, 2, 3, 4} old set id: 4381115552 new set: {1, 2, 3} new set id: 4381115776
字典
# 浅拷贝 copy模块的copy方法-字典 from copy import copy old_dict = {"name": "小菠萝"} new_dict = copy(old_dict) old_dict["second"] = "测试笔记" print("Old dict:", old_dict, "old dict id:", id(old_dict)) print("new dict:", new_dict, "new dict id:", id(new_dict)) # 输出结果 Old dict: {'name': '小菠萝', 'second': '测试笔记'} old dict id: 4381159680 new dict: {'name': '小菠萝'} new dict id: 4379632576
原文地址:https://www.cnblogs.com/poloyy/p/15086511.html
- Spring Cloud中Hystrix的服务降级与异常处理
- Open vSwitch源码解析之基于VxLAN实现NSH解析功能
- Spring Cloud自定义Hystrix请求命令
- JavaScript面试问题:事件委托和this
- Spring Cloud中的断路器Hystrix
- js的隐含参数(arguments,callee,caller)使用方法
- Spring Cloud中的负载均衡策略
- Spring Cloud中负载均衡器概览
- 没有event loop的PHP
- RestTemplate的逆袭之路,从发送请求到负载均衡
- limit_area_cirle
- Spring RestTemplate中几种常见的请求方式
- 什么是客户端负载均衡
- jQuery 升级踩坑大全
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ACM-ICPC 2019 山东省省赛 C Wandering Robot
- 数据库SQL语言从入门到精通--Part 2--MySQL安装
- ACM-ICPC 2019 山东省省赛 A Calandar
- POJ 1845-Sumdiv(厉害了这个题)
- 数据库SQL语言从入门到精通--Part 1--SQL语言概述
- DP背包(一)
- 程序员最喜欢用的在线代码编译器,什么?你竟然不知道!可以在网页敲代码,运行调试!
- ZOJ 3623 Battle Ships
- POJ 2955 区间DP必看的括号匹配问题,经典例题
- POJ 3211 Washing Clothes
- 1745 Divisibility
- POJ 3616 Milking Time
- C++面向对象编程类对象的定义
- Codeforce 1102 C. Doors Breaking and Repairing
- CodeForces - 1102B Array K-Coloring