python 切片操作创建一个新的列表副本,而直接赋值则使两个变量指向同一个列表

2023-12-26 14:43:47
if __name__ == '__main__':
    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_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)

friend_foods = my_foods[:]

friend_foods = my_foods
区别:

这段代码演示了在Python中如何通过不同方式复制列表,并展示了这些方式的差异。我将分两部分解释这段代码。

第一部分

my_foods = ['pizza', 'falafel', 'carrot cake']
friend_foods = my_foods[:]

这里,friend_foods 是通过对 my_foods 列表进行切片操作来创建的一个新列表。这意味着 friend_foodsmy_foods 是两个独立的列表。

my_foods.append('cannoli')
friend_foods.append('ice cream')

my_foods 添加 'cannoli',向 friend_foods 添加 'ice cream'。这些添加只影响各自的列表。

当打印这两个列表时,输出将会是:

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

这里,friend_foods 被直接赋值为 my_foods。这意味着两个变量指向同一个列表。

my_foods.append('cannoli')
friend_foods.append('ice cream')

无论是向 my_foods 添加元素还是向 friend_foods 添加元素,实际上都是在同一个列表上操作。

因此,当打印这两个变量时,输出将会是:

My favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

My friend's favorite foods are:
['pizza', 'falafel', 'carrot cake', 'cannoli', 'ice cream']

这两个变量实际上指向同一个列表,所以任何对一个变量的修改都会反映在另一个变量上。

总结

这段代码演示了列表的两种复制方式:切片操作创建一个新的列表副本,而直接赋值则使两个变量指向同一个列表。

文章来源:https://blog.csdn.net/sunyuhua_keyboard/article/details/135220256
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。