Python中深拷贝的问题怎么理解,如何应用
Admin 2022-06-23 群英技术资讯 919 次浏览
在实际应用中,我们有时候会遇到“Python中深拷贝的问题怎么理解,如何应用”这样的问题,我们该怎样来处理呢?下文给大家介绍了解决方法,希望这篇“Python中深拷贝的问题怎么理解,如何应用”文章能帮助大家解决问题。在实际工作中,经常涉及到数据的传递,在数据传递使用过程中,可能会发生数据被修改的问题。为了防止数据被修改,就需要在传递一个副本,即使副本被修改,也不会影响原数据的使用。为了生成这个副本,就产生了拷贝。下面先了解一下几个概念:对象、可变类型、引用
Python对象:在 Python 中,对象有一种很通俗的说法是,万物皆对象。说的就是构造的任何数据类型都是一个对象,无论是数字,字符串,还是函数,甚至是模块,Python都对当做对象处理。所有 Python 对象都拥有三个属性:身份、类型、值。看一个简单的例子:

可变与不可变对象:在Python中,按更新对象的方式,可以将对象分为 2 大类:可变对象与不可变对象。

引用:在 Python 程序中,每个对象都会在内存中申请开辟一块空间来保存该对象,该对象在内存中所在位置的地址被称为引用。在开发程序时,所定义的变量名实际就对象的地址引用。
引用实际就是内存中的一个数字地址编号,在使用对象时,只要知道这个对象的地址,就可以操作这个对象,但是因为这个数字地址不方便在开发时使用和记忆,所以使用变量名的形式来代替对象的数字地址。 在 Python 中,变量就是地址的一种表示形式,并不开辟开辟存储空间。
就像 IP 地址,在访问网站时,实际都是通过 IP 地址来确定主机,而 IP 地址不方便记忆,所以使用域名来代替 IP 地址,在使用域名访问网站时,域名被解析成 IP 地址来使用。
通过一个例子来说明变量和变量指向的引用:



浅拷贝只拷贝顶层引用,遇到引用类型,只是复制了个引用,修改了副本中引用类型里的数据,原数据也会改变,示例如下:


深拷贝会逐层进行拷贝,直到拷贝的所有引用都是不可变引用为止,示例如下:

lst1 = [1, [6, 7, 8], 3]
lst1
# [1, [6, 7, 8], 3]
lst2 = copy.deepcopy(lst1)
lst2
# [1, [6, 7, 8], 3]
lst2[1][1] = 996
print("副本:", lst2)
print("原始:", lst1)
# 副本: [1, [6, 996, 8], 3]
# 原始: [1, [6, 7, 8], 3]

在深拷贝中,修改了副本中引用类型里的数据,原数据不会改变。
总结如下:
def factorial(n):
return 1 if n == 1 else n * factorial(n - 1)
factorial(5)
结果如下:

猴子第一天摘下若干个桃子,当即吃了一半,还不瘾,又多吃了一个。第二天早上又将剩下的桃子吃掉一半,又多吃了一个。以后每天早上都吃了前一天剩的一半零一个。到第 10 天早上想再吃时,见只剩下一个桃子了,求第一天共摘了多少桃子?
# 第10天早上想再吃时,见只剩下一个桃子了,说明第9天的时候就只剩一个桃子了
def eat_peach(n):
return 1 if n == 2 else 2 * (eat_peach(n - 1) + 1)
eat_peach(10)
结果如下:

# -*- coding: UTF-8 -*-
"""
@Author :叶庭云
@CSDN :https://yetingyun.blog.csdn.net/
"""
def fibonacii(n):
return n if n <= 1 else (fibonacii(n - 1) + fibonacii(n - 2))
x = int(input("输出前几项?: "))
if x <= 0:
print("请输入输入正数!")
else:
print("斐波那契数列前{}项:".format(x), end=" ")
for i in range(1, x + 1):
print(fibonacii(i), end=" ")
结果如下:

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
科赫曲线是一种像雪花的几何曲线,所以又称为雪花曲线,它是de Rham曲线的特例。本文将利用Python语言实现这一曲线,需要的可以参考一下
时间戳又被称之为是Unix时间戳,原本是在Unix系统中的计时工具。它的含义是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。UNIX时间戳的 0 按照ISO 8601规范为 :1970-01-01T00:00:00Z。
这篇文章主要介绍了Python爬虫基础之requestes模块,文中有非常详细的代码示例,对正在学习python爬虫的小伙伴们有非常好的帮助,需要的朋友可以参考下
这篇文章主要介绍了Python基础知识+结构+数据类型,文章基于python基础知识围绕主题展开详细内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
缺失值可能是数据科学中最不受欢迎的值,然而,它们总是在身边。忽略缺失值也是不合理的,因此我们需要找到有效且适当地处理它们的方法。本文总结了四个Python查询缺失值的方法,需要的可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008