栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

一文弄懂Python参数的赋值与引用(copy模块)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

一文弄懂Python参数的赋值与引用(copy模块)

在Python中,所有对象分为可变对象和不可变对象。

其中,数值、字符串和元组是不可变对象;列表和字典是可变对象。

当程序试图改变数值类型的数据时,程序会自动生成新的数据,而不是改变原来的数据。

def func(x):
    x += 1

x = 1
func(x)
print(x)

# 输出结果:1

这是因为主程序中的x和函数中的x是不一样的,即它们的地址不一样。

但如果将参数换成一个列表:

def func(x):
    x.append(3)
y = [1, 2]
func(y)
print(y)

# 输出结果:[1, 2, 3]

可以看到,参数y发生了变化,如果不想要这种情况发生,即赋值时不进行可变对象的引用,而是直接新建一个地址并将数据复制。

我们可以使用Python的copy库来完成:

copy.copy:仅复制父对象而不复制子对象

copy.deepcopy:复制父对象和子对象

s1 = [1, 2, [3, 4, 5]]
s2 = s1
s3 = copy.copy(s1)  # 只复制父对象,不复制子对象
s4 = copy.deepcopy(s1)  # 复制父对象和子对象
s1.append(7)
s1[2].append(8)
print(s1, "n", s2, "n", s3, "n", s4)

# 输出结果:
[1, 2, [3, 4, 5, 8], 7] 
[1, 2, [3, 4, 5, 8], 7] 
[1, 2, [3, 4, 5, 8]] 
[1, 2, [3, 4, 5]]
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/323818.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号