(小甲鱼python)列表系列笔记合集三 列表V总结(浅拷贝和深拷贝)

五、列表V总结(浅拷贝和深拷贝)

1.一维列表
1.1 浅拷贝
方法1: 将x列表拷贝到y列表,修改x列表的值,y列表也会相应随着改变。

下图将两个变量指向同一个列表,然后通过下标来修改列表中的元素的值,改的是列表的内容,而非变量的引用,才会牵一发而动全身。
在这里插入图片描述

将x列表赋值给y,即y=x,当赋值运算发生时,python并不是将数据放到变量里面去,而是将变量与数据进行挂钩,这个行为称为引用。将一个变量赋值给另一个变量,其实就是将一个变量的引用传递给另一个变量。
在这里插入图片描述

1.2. 得到两个独立的列表(一维列表
方法一: x.copy()
修改x列表的值,y列表不变。
在这里插入图片描述方法二: 利用切片的方法,y=x[ : ]
在这里插入图片描述2.二维列表(嵌套列表):

2.1 浅拷贝(二维列表)
修改x的值,y随之改变。
在这里插入图片描述浅拷贝只拷贝了外层对象,如果包含嵌套对象的话,那么拷贝的只是其引用。
在这里插入图片描述

2.2 浅拷贝
需要导入copy()模块。
copy.copy(列表)

import copy
x=[[1,2,3],[4,5,6],[7,8,9]]
y=copy.copy(x) #模块.函数名
x[1][1]=0
y

[[1, 2, 3], [4, 0, 6], [7, 8, 9]]

2.3 深拷贝
deepcopy()
深拷贝修改x列表的值,y列表不发生改变。
在这里插入图片描述deepcopy()函数将原对象拷贝的同时,也将对象中所有引用的子对象进行了拷贝。
在这里插入图片描述课后题:
0.请问你是如何理解 ”在 Python 中,变量不是盒子” 这句话的?

答:在一些编程语言中,经常会有“变量就是盒子”这样的比喻,因为赋值操作就像是往盒子里面放东西。但在 Python 中变量并不是一个盒子,当赋值运算发生的时候,Python 并不是将数据放进变量里面,而是将变量与数据进行挂钩,这个行为我们称之为引用。

  1. 请问下面代码执行后,x == y 返回的结果是 True 还是 False?
x = [1, 2, 3]
y = x
y[1] = 1
x == y

True

列表x和列表y指向的是同一个内存。
在这里插入图片描述

  1. 请问下面代码实现的是浅拷贝还是深拷贝?
x = [[1, 2, 3], [4, 5, 6]]
y = x[:]

答:浅拷贝
在这里插入图片描述

  1. 请问下面代码执行后,列表 x 和 y 的内容分别是什么?
 x = [[1, 2, 3], [4, 5, 6]]
 y = x.copy()
 y.append(7)
 y[1].append(8)

答:代码执行后,列表 x 变成 [[1, 2, 3], [4, 5, 6, 8]],列表 y 变成 [[1, 2, 3], [4, 5, 6, 8], 7]。

调用列表的 copy() 方法实现的是浅拷贝,浅拷贝,只能拷贝第一层数据,其余仅拷贝其引用。
y.append(7) 是往列表 y 添加一个新元素 7,这一步操作对列表 x 并不会产生任何影响;
但是,y[1].append(8) 是往列表 y 的内嵌列表添加一个新元素,由于是浅拷贝,所以两个内嵌的列表是 x 和 y 共享的,该操作也会对列表 x 产生影响。

在这里插入图片描述
题目来自小甲鱼: 列表V

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值