Python实现浅拷贝的常用策略
问题
class Solution:
def finalPrices(self, prices: List[int]) -> List[int]:
result = prices
我在Python中这样赋值之后,更改result的值,是否会影响prices的值呢
解答
是的,你这样写会影响到原来的 prices
。
原因是在这一行:
result = prices
你并没有创建一个新的列表,而是让 result
变量引用了与 prices
相同的列表对象。
这意味着无论你通过 result
还是 prices
来修改列表内容,另一个变量也会“看到”同样的改动。
例子:
prices = [8, 4, 6, 2, 3]
result = prices
result[0] = 100
print(prices) # [100, 4, 6, 2, 3]
print(result) # [100, 4, 6, 2, 3]
可以看到,修改 result[0]
直接改变了 prices[0]
的值。
如果你不想让 result
修改 prices
,需要创建副本,常见方式有:
result = prices[:] # 切片复制
result = list(prices) # list() 复制
import copy
result = copy.copy(prices) # 浅拷贝
这样修改 result
的内容就不会影响到 prices
。
✅ 总结:
result = prices
→ 共享同一内存(会互相影响)result = prices[:]
或list(prices)
→ 创建副本(独立修改)