复制列表-python基础学习

本文通过实例详细解析了Python中列表的深拷贝与浅拷贝的区别,展示了如何通过切片操作实现列表的深拷贝,避免直接赋值导致的列表关联问题,确保两个列表独立变化。

❶ my_foods = [‘pizza’, ‘falafel’, ‘carrot cake’]
❷ friend_foods = my_foods[:]
print(“My favorite foods are:”)
print(my_foods)
print("\nMy friend’s favorite foods are:")
print(friend_foods)

结果:
My favorite foods are:
[‘pizza’, ‘falafel’, ‘carrot cake’]
My friend’s favorite foods are:
[‘pizza’, ‘falafel’, ‘carrot cake’]

my_foods = [‘pizza’, ‘falafel’, ‘carrot cake’]
❶ friend_foods = my_foods[:]
❷ my_foods.append(‘cannoli’)
❸ friend_foods.append(‘ice cream’)
print(“My favorite foods are:”)
print(my_foods)
print("\nMy friend’s favorite foods are:")
print(friend_foods)

结果:
My favorite foods are:
❹ [‘pizza’, ‘falafel’, ‘carrot cake’, ‘cannoli’]
My friend’s favorite foods are:
❺ [‘pizza’, ‘falafel’, ‘carrot cake’, ‘ice cream’]

切片复制,两个列表无关联

直接赋值,两个列表有关联
my_foods = [‘pizza’, ‘falafel’, ‘carrot cake’]
#列表会关联,尽量避免如此赋值
❶ friend_foods = my_foods
my_foods.append(‘cannoli’)
friend_foods.append(‘ice cream’)
print(“My favorite foods are:”)
print(my_foods)
print("\nMy friend’s favorite foods are:")
print(friend_foods)

### Python 列表深浅拷贝与矩阵乘法 #### 深浅拷贝的概念 在 Python 中,列表的深浅拷贝决定了新创建的对象与其原始对象之间的关系。浅拷贝仅复制外层容器的引用,而不会真正复制内部嵌套对象的内容;因此,如果修改了嵌套对象,则会影响原对象及其副本[^2]。相比之下,深拷贝会递归地复制整个数据结构的所有层次,从而确保源对象和目标对象之间没有任何共享部分。 以下是两种拷贝方式的区别示例: ```python import copy original_list = [[1, 2], [3, 4]] shallow_copy = copy.copy(original_list) # 创建浅拷贝 deep_copy = copy.deepcopy(original_list) # 创建深拷贝 # 修改 original_list 的子列表 original_list[0][0] = 'A' print("Original List:", original_list) # 输出 [['A', 2], [3, 4]] print("Shallow Copy:", shallow_copy) # 输出 [['A', 2], [3, 4]] (受影响) print("Deep Copy:", deep_copy) # 输出 [[1, 2], [3, 4]] (未受影响) ``` 上述代码展示了如何通过 `copy` 模块来执行浅拷贝和深拷贝,并验证两者的差异。 --- #### 使用 NumPy 进行矩阵乘法 NumPy 是一种高效的数值计算库,在处理多维数组时非常有用。对于矩阵乘法而言,可以直接利用 NumPy 提供的功能完成运算而不必手动编写循环逻辑。下面展示了一个简单的例子说明如何运用 NumPy 来实现两个二维矩阵相乘的操作: ```python import numpy as np matrix_a = np.array([[1, 2], [3, 4]]) matrix_b = np.array([[5, 6], [7, 8]]) result_matrix = np.dot(matrix_a, matrix_b) print(result_matrix) ``` 这里调用了 `np.dot()` 函数来进行标准意义上的矩阵点积操作。需要注意的是,当涉及较大规模的数据集或者复杂场景下的线性代数问题时,采用专门优化过的工具如 BLAS 或者 cuBLAS 可能带来性能上的显著提升。 另外值得注意的一点在于,尽管我们可以借助纯 Python 数据结构(即嵌套列表)模拟矩阵行为并自行定义相应的算法规则,但这样做通常效率较低且易错。推荐尽可能依赖成熟第三方库所提供的功能接口以简化开发流程并提高程序稳定性。 --- #### 结合深浅拷贝讨论矩阵乘法过程中的注意事项 假设我们需要基于某些初始条件构建多个版本的输入矩阵用于后续分析比较,此时就需要特别关注所使用的具体拷贝策略是否会引发意外副作用。例如考虑如下情况: - 如果只是简单赋值 (`new_matrix = old_matrix`) ,那么实际上两者指向同一片存储区域; - 若采取浅拷贝(`new_matrix = list(old_matrix)` 或 `new_matrix = copy.copy(old_matrix)` ) , 虽然顶层指针不同,但如果存在更深层次嵌套的话仍然可能互相干扰; - 唯有选用深拷贝(`new_matrix = copy.deepcopy(old_matrix)`) 才能够彻底隔绝相互影响的可能性。 这一步骤尤其重要因为在实际项目当中往往不止一次重复使用相同的基础组件作为参数传入不同的函数之中去求解各自独立的结果。一旦发生交叉污染就可能导致难以追踪定位的问题出现。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值