首页 > 编程语言 >Python 语法基础:赋值、深浅拷贝、可变与不可变对象

Python 语法基础:赋值、深浅拷贝、可变与不可变对象

时间:2024-11-16 20:16:21浏览次数:3  
标签:Python 对象 print 拷贝 copy 赋值

Python 是一种广泛使用的高级编程语言,其语法简洁且功能强大。本文将详细讲解 Python 中的赋值、深浅拷贝以及可变与不可变对象的基本概念和使用方法。

一、赋值

赋值是编程中最基本的操作之一,它用于将值或对象绑定到变量名。在 Python 中,赋值使用等号 = 来进行。

a = 10        # 将整数 10 赋值给变量 a
b = "Hello"   # 将字符串 "Hello" 赋值给变量 b
c = [1, 2, 3] # 将列表 [1, 2, 3] 赋值给变量 c

需要注意的是,Python 中的变量名只是对象的引用(或标签)。赋值操作不会创建对象的副本,而是让变量名指向同一个对象。

x = [1, 2, 3]
y = x         # y 指向 x 所指向的对象,而不是创建一个新对象
y.append(4)   # 修改 y 指向的对象
print(x)      # 输出 [1, 2, 3, 4],因为 x 和 y 指向同一个对象
二、可变与不可变对象

Python 中的对象可以分为可变对象和不可变对象。

  1. 不可变对象:一旦创建,其内容就不能被修改。常见的不可变对象包括整数、浮点数、字符串和元组。

    s = "Hello"
    s[0] = 'h'  # TypeError: 'str' object does not support item assignment
    
  2. 可变对象:创建后,其内容可以被修改。常见的可变对象包括列表、字典和集合。

    lst = [1, 2, 3]
    lst.append(4)  # 修改列表内容
    print(lst)     # 输出 [1, 2, 3, 4]
    
三、浅拷贝与深拷贝

由于 Python 中的赋值操作只是让变量名指向同一个对象,有时我们需要创建对象的副本,以便独立修改它们。这时可以使用拷贝操作。Python 提供了浅拷贝和深拷贝两种方式。

  1. 浅拷贝:只复制对象本身和对象中的直接引用,而不复制嵌套的对象。可以使用 copy 模块的 copy() 方法来进行浅拷贝。

    import copy
    
    original = [1, 2, [3, 4]]
    shallow_copy = copy.copy(original)
    
    shallow_copy[2][0] = 'X'
    print(original)       # 输出 [1, 2, ['X', 4]],因为浅拷贝没有复制嵌套列表
    print(shallow_copy)   # 输出 [1, 2, ['X', 4]]
    
  2. 深拷贝:复制对象本身以及对象中的所有嵌套对象。可以使用 copy 模块的 deepcopy() 方法来进行深拷贝。

    import copy
    
    original = [1, 2, [3, 4]]
    deep_copy = copy.deepcopy(original)
    
    deep_copy[2][0] = 'Y'
    print(original)       # 输出 [1, 2, [3, 4]],因为深拷贝复制了嵌套列表
    print(deep_copy)      # 输出 [1, 2, ['Y', 4]]
    
总结
  • 赋值:使用等号 = 将值或对象绑定到变量名,变量名只是对象的引用。
  • 可变对象:内容可以被修改,如列表、字典和集合。
  • 不可变对象:内容不能被修改,如整数、浮点数、字符串和元组。
  • 浅拷贝:只复制对象本身和直接引用,不复制嵌套对象,使用 copy.copy()
  • 深拷贝:复制对象本身以及所有嵌套对象,使用 copy.deepcopy()

理解这些基本概念对于编写高效、可维护的 Python 代码至关重要。希望这篇文章能帮助你更好地掌握 Python 的赋值、深浅拷贝以及可变与不可变对象。

标签:Python,对象,print,拷贝,copy,赋值
From: https://blog.csdn.net/2301_79727522/article/details/143676613

相关文章

  • python文件排序都有哪些方法
    在python环境中提供两种排序方案:用库函数sorted()对字符串排序,它的对象是字符;用函数sort()对数字排序,它的对象是数字,如果读取文件的话,需要进行处理(把文件后缀名‘屏蔽’)。(1)首先:我测试的文件夹是/img/,里面的文件都是图片,如下图所示:(2)测试库函数sorted(),直接贴出代码:impor......
  • 使用Python实现智能食品安全监测的深度学习模型
    食品安全是关乎公共健康的重要议题。随着科技的发展,深度学习技术在食品安全监测中的应用越来越广泛,通过自动化和智能化手段,可以有效提高食品质量检测的效率和准确性。本文将介绍如何使用Python实现一个智能食品安全监测的深度学习模型,并通过代码示例展示实现过程。项目概述......
  • Python基础:探索迭代器(Iterator)的奥秘
    引言在当今的科技时代,Python作为一种功能强大且广泛应用的编程语言,在数据处理、人工智能、网络爬虫等诸多领域发挥着不可替代的作用。迭代器作为Python中的一个重要概念,对于高效处理数据、优化算法等有着极大的意义。它能够以一种简洁而有效的方式遍历数据结构,无论是大型数......
  • 【Python】基础语法速览(上)
    本文力图用最快的方式向大家陈列Python的基础语法,适合接触过其他编程语言后快速上手Python或供查阅巩固用参考书籍:《Python程序设计人工智能案例实践》[美]保罗·戴特尔哈维·戴特尔著码字不易,求点赞收藏加关注有问题欢迎评论区讨论目录Python基础语法速览(上)变......
  • Python实现Graham Scan算法并进行凸包计算
    目录使用GrahamScan算法进行凸包计算第一部分:GrahamScan算法概述1.1什么是GrahamScan算法?1.2算法的应用场景1.3算法的优点和局限第二部分:算法的数学基础与步骤2.1凸包的定义与性质2.2算法的关键步骤2.3极角计算公式2.4算法流程图第三部分......
  • Jarvis March算法详解及Python实现(附设计模式案例)
    目录JarvisMarch算法详解及Python实现(附设计模式案例)第一部分:JarvisMarch算法概述与原理1.1什么是JarvisMarch算法?1.2算法原理1.3算法流程1.4时间复杂度第二部分:JarvisMarch算法的Python实现(面向对象设计)2.1面向对象设计2.2代码实现2.3代......
  • 25. 深浅拷贝
    一、深浅拷贝问题  在C++中,对象的拷贝可以分为浅拷贝(ShallowCopy)和深拷贝(DeepCopy)。  浅拷贝是指当一个对象拷贝另一个对象时,只是简单地复制了对象的各个成员变量的值,包括指向其他对象的指针。这意味着,如果源对象和目标对象中的成员变量是指针类型,那么浅拷贝只会......
  • 如何使用python批量读取母文件夹下的子文件夹名称
    文件准备如上图所示,我想要将dir中的所有的子文件夹的文件名打印出来代码准备importoscutrrent_dictionary=os.getcwd()#该值所代表的含义就是打开文件的绝对路径cutrrent_dictionary="D:\400-File\000-Project\000-Pycharm\005-CSDN_File"print(cutrrent_dic......
  • C. Penchick and BBQ Buns (python解)-codeforces
    C.PenchickandBBQBuns(python解)-codeforces原题链接:点击传送问题分析:我们需要为给定数量的BBQ包子分配填料,满足以下条件:每种填料必须至少使用两次,或者不使用。任何两个相同填料的包子之间的距离必须是一个完全平方数。思路:为了满足条件,我们可以利用完全平方数的......
  • 使用while循环分别对两个vector进行赋值,该怎么做
    问题在写程序的时候遇到了这样一个问题,见代码#include<iostream>#include<vector>usingnamespacestd;boolisequal(vector<int>vshort,vector<int>vlong){ for(intindex=0;index!=vshort.size();index++) if(vshort[index]!=vlong[index]) ......