Python中的变量引用对象需注意的几点

Python中的变量引用对象需注意的几点

分类:Python

 (55)  (0)

普通引用:

        Python中,变量的作用仅仅是一个标识,只有赋值后才被创建,它可以引用任何类型的对象,而且在引用之前必须赋值。赋值后的变量指向响应的对象,拥有该对象的空间。类型属于对象,但是不是变量。

[python] view plain copy

  1. a = 3  
  2. a = "science"  

        上述代码说明数值3和字符串“science”分别是两种对象,初始变量a赋值对象3被创建,变量a指向对象3的内存空间,之后变量a又指向了字符串的内存空间。

共享引用:

[python] view plain copy

  1. a = 3  
  2. b = a  

        上述代码说明变量a,b同时引用了对象3,两个变量引用了相同的对象。正是因为两者都是指向了相同的对象,所以当其中一个变量引用其他对象的时候,不会对另一个变量造成影响。例如:

[python] view plain copy

  1. a = “science”  

         在上面代码的基础上,变量a引用了字符串对象“science”,此时变量b依旧引用对象3,而不是“science”。

         但是有些对象的操作会在原处修改,例如列表。例如:

[python] view plain copy

  1. a = [1,2,3]  
  2. b = a  

        变量a,b应用了包含1,2,3对象的列表,自然而然的a[0]引用对象1,如果在变量a中执行操作

[python] view plain copy

  1. a[0] = 4  

那么变量b就变随之变为[4,2,3]。避免这种情况可以使用copy操作,替换引用操作。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏行者常至

final、abstract、interface

【包含抽象方法的类一定是抽象类;抽象类中可包括非抽象方法(具体的方法)。抽象类无法实例化,不能创建对象,只能通过子类继承,然后通过方法覆盖。如果不覆盖抽象方法,...

10010
来自专栏开发与安全

面向对象编程风格 VS 基于对象编程风格(boost::bind/function)

本文主要通过实现Thread 类来展现两种编程风格的不同点。 很多人没有区分“面向对象”和“基于对象”两个不同的概念。面向对象的三大特点(封装,继承,多态)缺...

26200
来自专栏程序员互动联盟

【Java概念学习】--数组的初始化

一维数组的声明方式: type var[]; 或type[] var; 声明数组时不能指定其长度(数组中元素的个数), Java中使用关键字new创建数组对象,...

350110
来自专栏码云1024

c++ public,protected,private

31870
来自专栏前端知识分享

js数组常用方法总结

最近工作中经常用到数组操作,每次都傻傻不知道怎么用,今天有时间整理了一下,希望对大家有帮助!这些基础的知识,要熟记于心。

1.2K30
来自专栏积累沉淀

程序、进程、线程的关系

创建一个Java线程常见的有两种方式: 1.继承Thread类 两种表示方法: (1).外部类 import java.util.D...

20560
来自专栏积累沉淀

线程的创建

创建一个Java线程常见的有两种方式: 1.继承Thread类 两种表示方法: (1).外部类 import java.util.D...

21980
来自专栏C语言及其他语言

【每日一题】问题 1117: K-进制数

考虑包含N位数字的K-进制数. 定义一个数有效, 如果其K-进制表示不包含两连续的0.

11920
来自专栏程序员互动联盟

【编程基础第十二讲】web开发编程基础--回调函数

存在问题: 我们都知道C语言存在回调函数,那么JavaScript中的回调函数是如何实现的? 如何实施: a.非参数回调函数 这类回调函数大多比较简单,往往传一...

26350
来自专栏龙首琴剑庐

Java可变参数列表

1、接受的传入参数情况 如public void test(String ...args){...}  1)不使用参数,如test() 2)使用一个或多个参数,...

34370

扫码关注云+社区

领取腾讯云代金券