精华内容
下载资源
问答
  • 我知道传统意义上的变量是作为类定义中的字段出现的,不过能不能在更高的层次把类的实例,也就是对象也看做一个变量呢? 感觉对象的引用语句,很想变量的赋值语句。
  • 对象变量、引用对象对象包括 不可变对象 和 可变对象。但从某种意义上来说,可变和不可变并不是对立关系。int,string,float,tuple 这四类属于 不可变对象。这里不可变的含义对象的地址不可变,内存地址与该...

    对象、变量、引用

    对象

    对象包括 不可变对象 和 可变对象。但从某种意义上来说,可变和不可变并不是对立关系。

    int,string,float,tuple 这四类属于 不可变对象。这里不可变的含义是:对象的地址不可变,内存地址与该对象为一一对应关系。

    list, dict 这两类属于 可变对象。这里可变的含义是:可变对象由不可变对象构成,可变对象自身的物理地址不可改变,但构成它的不变对象可以被替换

    以两个int对象为例,先来看一个例子:

    ···

    def check_const_variable():

    x = 77

    y = x

    经过上两步操作,x和y现在均指向储存对象77的内存地址 38076456

    print('x id:' + str(id(x))) #38076456

    print('y id:' + str(id(y))) #38076456

    对x进行重新赋值,x指向储存对象69的内存地址 38074656

    x = 69

    print('x id:' + str(id(x))) #38074656

    检查y,发现y仍然指向38076456,说明77这个对象没有被改变

    print('y id:' + str(id(y))) #38076456

    z = [77]

    w = z

    经过上两步操作,z和w现在均指向储存对象[77]的内存地址 39114944,z的第一个元素地址38074656

    print('z id:' + str(id(z))) #39114944

    print('w id:' + str(id(w))) #39114944

    print('z first element id:' + str(id(z[0]))) #38074656

    对z的第一个元素进行重新赋值,z从内容上来已经是一个新的列表,但是它的物理地址没变。而此时z的第一个元素已经被替换。

    z[0] = 65

    print('z first element id:' + str(id(z[0]))) #38074752

    再检查w,发现w仍然指向39114944,说明[77]这个对象的地址没有被改变,w一直指向它。

    print('w id:' + str(id(w))) #39114944

    print('w first element id:' + str(id(w[0]))) #38074752

    ···

    变量 和 引用

    -变量是一个系统表的元素,拥有指向对象的连接的空间。

    -引用是自动形成的从变量到对象的指针

    ···

    x = 69 #x是一个变量,69是一个不可变对象,x中储存了69这个不可变对象的内存地址

    y = [69,33,44] #y是一个变量,[69]是一个可变对象,y中储存了[69]这个不可变对象的内存地址

    print id(x) #38074656

    print id(y) #39115016

    print id(y[0]) #38074656

    ···

    从上面的例子可以看到,x和y的关系是:y->39115016->[38074656,...,...]

    而其中的 箭头->,就表示引用

    创建对象

    不可变对象的创建后,相同内容的不可变变量 在同一个进程中内存地址是相同的

    ···

    x = 100

    y = 'hello'

    z = 156.0

    y = 100

    print id(x) #38075904

    print id(y) #38075904

    ···

    也就是说在这个进程中,无论创建几个100整形变量,它的地址都是38075904。

    可变对象创建后,相同内容的可变变量 在同一个进程中内存地址是不同的

    ···

    xx = [100]

    yy = [100]

    print id(xx) #39115016

    print id(yy) #39115376

    ···

    复制对象

    -当把一个对象赋给一个数据结构元素或者变量名时,python总是会存储对象的引用,而不是对象的一个拷贝。

    -字符串方法都生成了新的字符串对象。

    展开全文
  • 例如: Dog a=new Dog(); 引用变量a的作用获得new Dog()所创建对象的位置或者说地址吗
  • for(var i=0; i<5; i++){document.main_form.status_array[i].value="hello";...status_array自定义的数组,它的内容赋的表单的对象名称,但是经验证,这种方式不能正确获得表单对象的值。请大侠指点
  • c# 类和对象的区别及联系 类:一种数据类型,定义了存储...人一个类,具有姓名、年龄、性别这些数据【变量】,和吃饭、打招呼这些行为【方法】,张三和李四则人这个类的具体对象/实例,他们都具有姓名年龄性别,但

    c# 类和对象的区别及联系

    类:一种数据类型,定义了存储哪些数据(成员变量)以及如何处理这些数据的行为(成员函数);
    对象:也叫实例,是类的具体个案;
    同一个类的对象都具有相同的存储结构和行为功能,但具体每个对象存储的数据可以不同。
    举例:
    人是一个类,具有姓名、年龄、性别这些数据【变量】,和吃饭、打招呼这些行为【方法】,张三和李四则是人这个类的具体对象/实例,他们都具有姓名年龄性别,但各人的数据又各有不同。
     
    又如:TextBox是一个类,当你在窗体上拖入一个文本框后,VS就自动实例化了一个叫textBox1的对象,再拖一个,VS就再实例化一个对象,叫textBox2,前后两个文本框对象都有Text这个属性,但textBox1.Text可以是AAA,而textBox2.Text可以是BBB。
     
    概括为:类是一种分类,对象则是具体事物,对象一定是属于某个类。

    来自:http://zhidao.baidu.com/question/473708077.html

    在C#中,对象和变量是一回事吗?有区别吗?

    对象和变量当然不是一回事啦,这明明就是两回事嘛!什么是对象,对象就是某一个类的实例,而类表示对现实生活中一类具有共同特征的事物的抽象,要使用对象,必须先定义类,然后再创建该类的具体对象,
    而至于变量,量是指在程序运行过程中其值可以发生变化的量。定义变量的一般格式如下。
    [变量修饰符] 类型说明符 变量名1=初值1,变量名2=初值2,…;
    声明变量时,使用static关键字声明的变量为静态变量。
    局部变量是临时变量,它只是在定义它的块内起作用,所谓块是指大括号“{”和“}”之间的所有内容。
    知道这两个概念的区别了吧,这根本就是两个没有关系的概念。

    来自:http://bbs.itzcn.com/thread-4781-1-1.html

    展开全文
  • 今天在看深入理解java虚拟机时看到一段话,大意说JMM模型不会对局部变量及方法参数实施内存一致性协议的约定,方法参数好说,因为线程栈内部的数据,线程私有的,但是局部变量如果是对象呢,线程持有的是对象...

    今天在看深入理解java虚拟机时看到一段话,大意是说JMM模型不会对局部变量及方法参数实施内存一致性协议的约定,方法参数好说,因为是线程栈内部的数据,是线程私有的,但是局部变量如果是对象呢,线程持有的是对象的引用,如果多个线程同时对对象修改呢?为此特意做了个实验:

      Thread hello = new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    Student student = new Student();
                    student.setName("hello");
                    System.out.println("hello:" + student);
                }
            });
    
            Thread world = new Thread(new Runnable() {
                @Override
                public void run() {
                    Student student = new Student();
                    student.setName("world");
                    System.out.println("world:" + student);
                }
            });
    
            hello.start();
            world.start();

    结果输出:

    world:oa.demo.thread.ObjectTest.Student@33c5a8a9
    hello:oa.demo.thread.ObjectTest.Student@5a6b83b0

    可以发现,其实每个线程内部的对象都在堆中创建了一份,并不共用,所以并发不存在问题

    展开全文
  • 其他语言中,if 后都跟条件表达式,为什么 Python 中可以跟任意对象?交换变量 b, a = a, b 为什么可以这么写?

    1、万物皆可布尔

    一般语言中的 if 语句语法是这样的:

    if (条件表达式)
    {
        执行语句
    }
    

    而在 Python 中,if 后面不仅可以是条件表达式,还可以是任意对象。例如:

    my_list = [1, 2, 3]
    if my_list:
        print(my_list)
    

    在 Python 中,False、None、数值 0、空序列、空映射都被视为 [假],其他各种值被视为 [真]。

    那么,这是如何实现的呢?背后的原理是什么呢?

    为了判定一个对象 x 为 [真] 还是 [假],Python 会调用 bool(x) 函数。该函数背后调用的是魔法方法 __bool__,如果不存在 __bool__ 方法,bool(x) 会尝试调用 __len__ 方法。若返回 0,则 bool(x)​ 返回 False,否则返回 True

    而默认情况下,我们自定义的类的实例总被认为是 [真]。

    写个例子验证一下。

    class MyClass:
        def __bool__(self):
            return False
    
    
    my_class = MyClass()
    
    if my_class:
        print('真')
    else:
        print('假')
    

    输出:

    就是说:当对象用于任何需要表示为布尔值的时候,Python 会调用 bool(x) 方法,而我们可以通过重写 __bool__ 方法或 __len__ 方法改变默认的判断。

    2、变量是如何交换的

    Python 中交换两个变量非常简单:

    b, a = a, b
    

    为什么可以这样写,是语法糖吗?诚然不是,这是元组拆包

    不明白?写成这样是不是就明白了:

    b, a = (a, b)
    

    Python 解析器会自动将 a, b 视作元组,所以上面两个写法是等价的。不信?看下面的例子:

    a = 1
    b = 2
    c = a, b
    print(c)
    print(type(c))
    

    输出:

    (1, 2)
    <class 'tuple'>
    

    所以 b, a = a, b 这种写法利用的是元组拆包。


    展开全文
  • 这些概念在强类型的语言中貌似并不是那么的重要,但是在动态类型的语言中,还是值得去仔细思考一下的什么是变量对于变量,在数学中我们已经了解过,就是一个值可能会改变的量。在C++中,我们对变量的认识应该相当于...
  • 【参考】首先,Python中,对象才有类型, 变量是没有类型的,它只是对象的“引用”。其次,Python中对象被分为两类:可更改对象和不可更改对象(包括numbers, strings, tuples)。a = 1 #一个指向int数据类型的a(再次...
  • js中所有的全局变量和方法都是继承于window对象吗? 比如变量:vartext="嗨!你好";可以这样访问console.log(window.text);函数:functionfun(){alert("嗨!你好");}可以这样访问window.fun...Global对象是global对象.
  • 如果你曾经学习过c,java等静态语言,变量对象等都需要定义类型,否则报错在python里面,类型,在运行中动态设定的之前我们已经多次提到变量,我们在这里再次说一下:我们以a=3为例子说明1.变量的创建先有了3这...
  • 简单的说,当 test初始化之后,他内部的变量可以改变值的,但是test本身不能变成另一个 test。从内存模型角度说。test本身一个指针,存在于 stack。test = new Test()后,虚拟机就在内存Heap中给test开辟了一...
  • 展开全部java易混淆概念之类变量32313133353236313431303231363533e4b893e5b19e31333365643662、实例变量、局部变量变量、实例变量、局部变量变量是类中独立于方法之外的变量,用static 修饰。实例变量类中...
  • 在func1() 中我们能理解,因为两个字典对象,修改f变量的属性,不会影响fruits变量。在func2() 中使用P: f = fruits ,将fruits变量赋给 f变量,修改了f变量的属性,同时就修改了 fruits的属性。这为什么呢?...
  • 这几天上课的时候遇到这样一个疑问,为什么可以...1.前者创建对象,并把对象赋值给变量p1 后者只是创建了对象 2.因为前者创建了变量p1,所以后续可以通过此变量对象进行其他的操作 后者属于匿名对象、临时变量,...
  • 问题每当我初始化一个Chromosome对象并调用generateChromosome方法时,“test”群体的所有染色体都保持不变?public class Chromosome{private static int defaultLength = 11;private static char []genes = new.....
  • javascript中 window.变量全局对象吗? 例如: <script> window.abc='123'; </script> 这里面的window.abc 全局对象吧?可以用在当前页面的所有地方吗?任何浏览器都兼容吗?
  • 变量是类所有实例化对象共有的,而成员变量是每个实例化对象自身特有的。下面通过两个小程序来说明一下。(推荐学习:Python视频教程)class A(object):def __init__(self):#aa为成员变量self.aa = 10@...
  • 问题:java源码中为什么这么写呢? 直接操作this.items 有什么问题吗,我看很类都这样写法,方法操作全局变量时...这个成员变量和全局变量加不加final修饰都一样,只要成员变量指向全局变量时只在第一次getfield,
  • python变量对象和引用你真的明白了吗 变量对象和引用 Python不像C++,Java等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值。对Python语言来讲,对象的类型和内存都在运行时确定的。这也...
  • 复制代码而在 Python 中,if 后面不仅可以条件表达式,还可以任意对象。例如: my_list = [1, 2, 3] if my_list: print(my_list) 复制代码在 Python 中,False、None、数值 0、空序列、空映射都被视为 [假],...
  • 你的全局变量,或者函数,可以覆盖 window 对象变量或者函数。局部变量,包括 window 对象可以覆盖全局变量和函数。上面的话不理解,它的意思全局的和window的可以相互覆盖吗? 转载于:...
  • ![图片说明](https://img-ask.csdn.net/upload/201701/06/1483710734_753998.png)
  • Python从设计之初就已经是一门面向对象的语言,正因为如此,在Python中创建一个类和对象是很容易的。面向对象技术简介(推荐学习:Python视频教程)类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该...
  • 在Python中,一切皆对象(此处略过上万字,后面专门论述)。对象,可以看成内存中的一个...Id是对象的唯一标志,type表示这个对象的数据类型,value表示这个对象的具体的值,alias这个对象的别名/引用名称(可选)。...
  • 我们知道JVM中一个对象实例超出作用域或无引用的时候会被垃圾回收,那么他被垃圾回收后,依赖其成员变量的其他实例是否还能正常使用呢?经过测试后发现即使一个实例被垃圾回收,如果他内部的数据被其他对象使用,...
  • 引子:变量对象变量是Java中最基本的存储单元,为变量赋值可以使用赋值表达式。如:int i = 10; 该表达式的含义将一个字面量(literal)10赋值给一个类型为int型的变量变量名为i。这一个为基本数据类型的...
  • java中if( ...){...} 小括号里面可以单单一个变量名或者常量名或者一个对象名吗

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,974
精华内容 789
关键字:

对象是变量吗