Python 接口自动化测试中的深拷贝与浅拷贝~

news2024/9/19 18:34:31

前言

在编写接口自动化测试脚本时,我们经常需要复制数据结构来模拟不同的测试场景。Python 提供了两种拷贝机制:浅拷贝和深拷贝。理解这两种拷贝的区别对保证测试数据的一致性和准确性至关重要。

图片

浅拷贝 vs 深拷贝

浅拷贝:只复制引用,对于可变对象内部的元素不进行复制。

深拷贝:不仅复制引用,还会复制对象内部的所有元素。‍

图片

拷贝工具

copy 模块:提供了 copy() 和 deepcopy() 函数。

内置函数:如 list.copy() 或 dict.copy()。‍

图片

示例代码

示例 1: 基础列表拷贝

import copyoriginal = [1, 2, 3]shallow_copy = original[:]deep_copy = copy.deepcopy(original)original.append(4)print("Original:", original)print("Shallow copy:", shallow_copy)print("Deep copy:", deep_copy)

输出结果:

Original: [1, 2, 3, 4]Shallow copy: [1, 2, 3]Deep copy: [1, 2, 3]

示例 2: 列表嵌套列表

original = [[1, 2], [3, 4]]shallow_copy = copy.copy(original)deep_copy = copy.deepcopy(original)original[0].append(5)print("Original:", original)print("Shallow copy:", shallow_copy)print("Deep copy:", deep_copy)

输出结果:

Original: [[1, 2, 5], [3, 4]]Shallow copy: [[1, 2, 5], [3, 4]]Deep copy: [[1, 2], [3, 4]]

示例 3: 列表切片拷贝

original = [1, 2, 3, [4, 5]]shallow_copy = original[:]original[3].append(6)print("Original:", original)print("Shallow copy:", shallow_copy)

输出结果:

Original: [1, 2, 3, [4, 5, 6]]Shallow copy: [1, 2, 3, [4, 5, 6]]

示例 4: 字典拷贝

original = {'a': 1, 'b': 2}shallow_copy = original.copy()deep_copy = copy.deepcopy(original)original['c'] = 3print("Original:", original)print("Shallow copy:", shallow_copy)print("Deep copy:", deep_copy)

输出结果:

Original: {'a': 1, 'b': 2, 'c': 3}Shallow copy: {'a': 1, 'b': 2}Deep copy: {'a': 1, 'b': 2}

示例 5: 字典嵌套字典

original = {'a': 1, 'b': {'c': 2}}shallow_copy = copy.copy(original)deep_copy = copy.deepcopy(original)original['b']['c'] = 3print("Original:", original)print("Shallow copy:", shallow_copy)print("Deep copy:", deep_copy)

输出结果:

Original: {'a': 1, 'b': {'c': 3}}Shallow copy: {'a': 1, 'b': {'c': 3}}Deep copy: {'a': 1, 'b': {'c': 2}}

示例 6: 自定义对象拷贝

class MyClass:    def __init__(self, x):        self.x = xoriginal = MyClass([1, 2])shallow_copy = copy.copy(original)deep_copy = copy.deepcopy(original)original.x.append(3)print("Original:", original.x)print("Shallow copy:", shallow_copy.x)print("Deep copy:", deep_copy.x)

输出结果:

Original: [1, 2, 3]Shallow copy: [1, 2, 3]Deep copy: [1, 2]

示例 7: 元组拷贝

original = (1, 2, [3, 4])shallow_copy = copy.copy(original)deep_copy = copy.deepcopy(original)original[2].append(5)print("Original:", original)print("Shallow copy:", shallow_copy)print("Deep copy:", deep_copy)

输出结果:

Original: (1, 2, [3, 4, 5])Shallow copy: (1, 2, [3, 4, 5])Deep copy: (1, 2, [3, 4])

示例 8: 集合拷贝

original = {1, 2, 3}shallow_copy = copy.copy(original)deep_copy = copy.deepcopy(original)original.add(4)print("Original:", original)print("Shallow copy:", shallow_copy)print("Deep copy:", deep_copy)

输出结果:

Original: {1, 2, 3, 4}Shallow copy: {1, 2, 3, 4}Deep copy: {1, 2, 3}

示例 9: 多层次嵌套

original = [1, {'a': 2, 'b': [3, 4]}, 5]shallow_copy = copy.copy(original)deep_copy = copy.deepcopy(original)original[1]['b'].append(5)print("Original:", original)print("Shallow copy:", shallow_copy)print("Deep copy:", deep_copy)

输出结果:

Original: [1, {'a': 2, 'b': [3, 4, 5]}, 5]Shallow copy: [1, {'a': 2, 'b': [3, 4, 5]}, 5]Deep copy: [1, {'a': 2, 'b': [3, 4]}, 5]

示例 10: 自定义拷贝方法

class MyClass:    def __init__(self, x):        self.x = x    def custom_copy(self):        return MyClass(self.x[:])original = MyClass([1, 2])shallow_copy = original.custom_copy()original.x.append(3)print("Original:", original.x)print("Shallow copy:", shallow_copy.x)

输出结果:

Original: [1, 2, 3]Shallow copy: [1, 2]

总结

通过这些例子可以看出,浅拷贝仅复制顶层对象,而深拷贝会递归复制所有对象。在接口自动化测试中,选择合适的拷贝方式可以帮助我们构建出更加可靠和可维护的测试用例。

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2041465.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

软件架构:依赖倒置原则的魅力

依赖倒置原则(Dependency Inversion Principle, DIP)是面向对象设计的基本原则之一,由罗伯特C马丁(Robert C. Martin)提出。这一原则旨在降低系统中各个组件之间的耦合度,提高系统的可维护性和可扩展性。 …

四川正信法律:借钱不还报警有没有用

在日常生活中,金钱往来是人际交往中不可或缺的一部分。然而,当借钱不还成为一种普遍现象时,人们往往会感到困惑和无奈。那么,面对借钱不还的情况,报警是否有用呢? 我们要明确一点,借钱不还属于民事纠纷&am…

注意力机制 — 它是什么以及它是如何工作的

一、说明 注意力机制是深度学习领域的一个突破。它们帮助模型专注于数据的重要部分,并提高语言处理和计算机视觉等任务的理解和性能。这篇文章将深入探讨深度学习中注意力的基础知识,并展示其背后的主要思想。 二、注意力机制回顾 在我们谈论注意力之前&…

TcpSocket在切后台后如何保活

1)TcpSocket在切后台后如何保活 2)Magica Clothes 2插件与Burst编译问题 3)粒子拖尾合批失败怎么办 4)如何让射线追踪跟随我FPS游戏的十字准星进行移动 这是第398篇UWA技术知识分享的推送,精选了UWA社区的热门话题&…

适合学生党的运动耳机都有哪些?五大适合学生党的运动耳机推荐

2024年春季,开放式蓝牙耳机就凭借“佩戴舒适、开放安全”等优势火热出圈,这让各大音频厂商更新迭代速度不断加快,新品层出不穷。而用户面对市场上琳琅满目的开放式蓝牙耳机,一时间也不知道如何选择。那么对于学生党来说&#xff0…

linux 基本指令讲解 下

基本指令 date 显示 date 指定格式显示时间:date%Y:%m:%d(冒号可以随便改) 在显示方面 %H : 小时(00..23) %M : 分钟(00..59) %S : 秒(00..61) %X : 相当于 %H:%M:%S %d : 日 (01..31) %m : 月份 (01..12) %Y : 完整年份 (0000..9999) %F : 相当于 %Y-%m-%d在时间设置方面 date…

依赖注入+中央事件总线:Vue 3组件通信新玩法

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-依赖注入-中央事件总线 大家好,依旧青山, 最近呢也随着需求的变更调优…

Prometheus部署和基本操作

1 项目目标 (1)对Prometheus有基本的了解 (2)能够部署出一套Prometheus看板系统 (3)对Prometheus界面熟悉 1.1 规划节点 主机名 主机IP 节点规划 prome-master01 10.0.1.10 服务端 prome-node01 …

java基础学习笔记1

Java编程规范 命名风格 1. 【强制】代码中的命名均不能以下划线或美元符号开始,也不能以下划线或美元符号结束。 反例:_name / __name / $name / name_ / name$ / name__ 2. 【强制】代码中的命名严禁使用拼音与英文混合的方式,更不允许直…

社交媒体分析:如何利用Facebook的数据提升业务决

在数字化时代,社交媒体已经成为企业战略中不可或缺的一部分。Facebook,作为全球最大的社交平台之一,提供了丰富的数据资源,这些数据不仅能够帮助企业了解市场趋势,还能提升业务决策的精准度。本文将探讨如何有效利用Fa…

CV党福音:YOLOv8实现实例分割(一)

前面我们得知YOLOv8不但可以实现目标检测任务,还包揽了分类、分割、姿态估计等计算机视觉任务。在上一篇博文中,博主已经介绍了YOLOv8如何实现分类,在这篇博文里,博主将介绍其如何将实例分割给收入囊中。 YOLOv8实例分割架构图 …

Spring Boot3.3.X整合Mybatis-Plus

前提说明&#xff1a; 项目的springboot版本为&#xff1a;<version>3.3.2</version> 需要整合的mybatis-plus版本&#xff1a;<version>3.5.7</version> 废话不多说&#xff0c;开始造吧 1.准备好数据库和表 2.配置全局文件application.properti…

本地连接服务器redis

详细步骤 1.看一下服务器上redis实例的运行状态&#xff1a; [rootiZuf67k70ucx14s6zcv54dZ var]# ps aux | grep redis-server若显示&#xff1a; 则说明服务器上的redis已经启动了&#xff0c;若没有&#xff0c;则请重启一下&#xff1a; sudo systemctl restart redis…

原来,考证还可以领取补贴Money

武汉ZF真的对打工人太好了&#xff0c;只要社保交满 12 个月就可以参加职业技能考试&#xff0c;考试通过就能领 2K 的补贴。 而且证考了对找工作工资也能比别人高几百&#xff0c;真的太爽了&#xff0c;有空的姐妹都去给我考&#xff01;&#xff01;&#xff01; 没空的也给…

思科三层交换机实现EIGIP路由协议6

#路由协议实现# #任务六三层交换机实现EIGIP路由协议6# #1配置计算机的IP地址、子网掩码和网关 #2配置Switch-A的名称及其接口IP地址 Switch(config)#hostname Switch-A Switch-A(config)#ip routing Switch-A(config)#int g0/1 Switch-A(config-if)#no switchport Switc…

docker pull实现断点续传

问题背景 在使用Docker拉取DockerHub的镜像时&#xff0c;经常会出现网络不稳定的问题&#xff0c;这就导致拉取到一半的镜像会重新拉取&#xff0c;浪费时间。例如下面这种情况&#xff1a; 第二次拉取 这是一个网络中断的场景&#xff0c;第二次重新拉取的时候&#xff0c;同…

电子元件-潮湿敏感度MSL等级

目录&#xff1a; 1、什么是MSL 2、MSL测定的流程 3、MSL的分类★ 4、其他 1、什么是MSL MSL&#xff1a;MSL 是 Moisture Sensitivity Level 的缩写&#xff0c;是湿气敏感性等级的意思。 MSL 的提出就是为了给湿度敏感性 SMD 元件的封装提供一种分类标准&#xff0c;从而…

UE虚幻引擎可以云渲染吗?应用趋势与挑战了解

虚幻云渲染技术是基于虚幻引擎的云端渲染技术&#xff0c;将虚幻引擎的渲染计算任务通过云计算的方式进行处理和渲染、并将渲染结果传输到终端设备上进行展示。虚幻引擎云渲染技术在近年来得到了迅猛的发展&#xff0c;并在各个领域得到了广泛的应用&#xff0c;包括游戏、电影…

使用CompletableFuture遇到的一个小坑

在使用CompletableFuture时&#xff0c;发现获取数据时&#xff0c;有时候数据获取不到(值为null)。 代码如下&#xff1a; package com.example.mavendemo.completablefuture;import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j;import java.util.A…

STM32第十二节(中级篇):串口通信(第一节)——功能框图讲解

前言 我们在51单片机中就已经学习过了串口通信的相关知识点&#xff0c;那么我们现在在32单片机上进一步学习通信的原理。我们主要讲解串口功能框图以及串口初始化结构体以及固件库讲解。 STM32第十二节&#xff08;中级篇&#xff09;&#xff1a;串口通信&#xff08;第一节…