有以下代码:
# assignment behaviour for integer
a = b = 0
print a, b # prints 0 0
a = 4
print a, b # prints 4 0 - different!
# assignment behaviour for class object
class Klasa:
def __init__(self, num):
self.num = num
a = Klasa(2)
b = a
print a.num, b.num # prints 2 2
a.num = 3
print a.num, b.num # prints 3 3 - the same!
问题:
这是许多Python用户的绊脚石。对象引用的语义与C程序员习惯的语义不同。
让我们来考虑第一种情况。当您说时a = b = 0
,将int
创建一个具有值的新对象,并创建了对其的0
两个引用(一个是a
,另一个是b
)。这两个变量指向同一个对象(我们创建的整数)。现在,我们运行a = 4
。将创建一个新int
的价值对象,4
并a
指向该对象。这意味着,对的引用数4
为1,并且对的引用数0
减少了1。
将此与a = 4
在a
“指向”的内存区域写入的C中进行比较。a = b = 4
用C表示4
写到两块存储器-一个用于a
另一个用于b
。
现在,第二种情况a = Klass(2)
创建一个类型为object的对象Klass
,将其引用计数加1并a
指向该对象。b = a
只需将a
指向的对象b
指向同一事物,并将该事物的引用计数加一。这与您这样做会发生的情况相同a = b = Klass(2)
。由于您要取消引用相同的对象并打印属性值a.num
,b.num
因此尝试进行打印并保持相同。您可以使用id
内置函数来查看该对象是相同的(id(a)
并且id(b)
将返回相同的标识符)。现在,通过为对象的属性之一分配值来更改对象。由于a
和b
指向同一对象,您希望当通过a
或访问该对象时,值的变化是可见的b
。事实就是如此。
现在,为您的问题的答案。
本文向大家介绍js对象类型,基本对象类型以及引用对象类型的区别?相关面试题,主要包含被问及js对象类型,基本对象类型以及引用对象类型的区别?时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 分为基本对象类型和引用对象类型 基本数据类型:按值访问,可操作保存在变量中的实际的值。基本类型值指的是简单的数据段。基本数据类型有这六种:undefined、null、string、number、bool
本文向大家介绍javascript中基本类型和引用类型的区别分析,包括了javascript中基本类型和引用类型的区别分析的使用技巧和注意事项,需要的朋友参考一下 基本类型和引用类型 ECMAScript包含两个不同类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段;引用类型值指由多个值构成的对象。当我们把变量赋值给一个变量时,解析器首先要做的就是确认这个值是基本类型值还是引用类型值。
所以我有这个代码: 它应该打开一个文本为"true"的消息对话框。问题是它会给出一个编译器错误,说我不能调用基元类型int的方法。为什么会发生这种情况? 铸造按预期工作。我只是不明白为什么对象会变成一个基本类型。
ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。 在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。第3 章讨论了5 种基本数据类型:Undefined、Null、Boolean、Number 和String。这5 种基本数据类型是按值访问的,因为可以操作保存在变量中的实际的
我在Spring应用程序中有不同的用户类型。我实现了某种继承。所有users类型都从User类扩展而来。我想这里两张桌子应该够了: 表“users”-包含所有共享实体属性的列 表“users_corporate”-包含CorporateCustomer类attriburtes:companyName和VatNumber的列 “用户”将具有:id、用户名、密码、第一名、最后名、电子邮件、手机、城市、
面向对象简介 对象的作用是:封装信息。比如Student类里可以封装学生的姓名、年龄、成绩等。 对象具有特征(属性)和行为(方法)。 面向对象:可以创建自定义的类型,很好的支持继承和多态。 面向对象的特征:封装、继承、多态。 对象简介 基本数据类型和引用数据类型的对比 基本数据类型(值类型):String 字符串、Number 数值、Boolean 布尔值、Null 空值、Undefined 未定