博客
关于我
Python 接口自动化测试中的深拷贝与浅拷贝~
阅读量:796 次
发布时间:2023-03-07

本文共 3708 字,大约阅读时间需要 12 分钟。

前言

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

浅拷贝和深拷贝的主要区别在于,浅拷贝只复制对象的顶层结构,而深拷贝则会递归复制所有嵌套的对象。选择合适的拷贝方式能够帮助我们构建更加可靠和可维护的测试用例。

浅拷贝 vs 深拷贝

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

拷贝工具

Python 提供了多种拷贝工具: - `copy` 模块:提供了 `copy()` 和 `deepcopy()` 函数。 - 内置函数:如 `list.copy()` 或 `dict.copy()`。

示例代码

示例 1: 基础列表拷贝

import copy original = [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'] = 3 print("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'] = 3 print("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 = x original = 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://yvofk.baihongyu.com/

你可能感兴趣的文章
python regex_Python RegEx
查看>>
python requests post 中文结果请求得到unicode
查看>>
Python Requests接口自动化测试实战
查看>>
Python requests模块
查看>>
python request与grequests该如何选择
查看>>
python request模块
查看>>
Python requirements.txt的使用方法
查看>>
Python REST(Web 服务)框架的推荐?
查看>>
Python rsa 加密
查看>>
Python RSA操作
查看>>
Python轻松实现统计学中重要的相关性分析
查看>>
Python scrapy 常见问题及解决 【遇到的坑】
查看>>
Python Seborn热图数据的动态更新
查看>>
Python Seborn绘制空白直方图
查看>>
Python Selenium - 获取href值
查看>>
Python Selenium实现自动化测试及Chrome驱动使用!
查看>>
Python Selenium搭建UI自动化测试框架
查看>>
Python Selenium模块详解
查看>>
Python selenium爬取影评生成词云图
查看>>
python selenium自动化测试报告
查看>>