[Python]链式赋值(Chained assignment)

[Python]链式赋值(Chained assignment)

在C,Java语言中,赋值是从右到左依次执行。
a = s = 3 等价于: a = (s = 3),即s = 3表达式是有返回值的. 它会返回赋值的结果3,然后赋值给a
而在Python环境下写a = (s = 3)会触发SyntaxError: invalid syntax
a = (s = 3)出错的原因是因为Python 的运算符 = 是引用,而非赋值运算,所以 s = 3 的含义是创建一个值为 3 的 int 对象,再将 s 指向该对象的地址。

实例
a = b = c = 1
等价于
a = 1; b = a; c = a
x = [1, 2, 3, 4, 5,]
i = 0
i = x[i] = 3
求i与x的值。
----------------------------
i = 3; x[3] = 3; x = [1, 2, 3, 4, 5,]
a = b = c = [] ③
c = [1,2,3] ①
c.append(3)
b.append(1) ②
----------------
①:a = [], b = [], c = [1,2,3]
②:a = [1], b =[1],c=[1,2,3,3] //说明a和b代表的对象是相同的。
-----------------------------------------------------------------------------------
a = b = c = [],这时候,a,b,c对应的都是同一个内存中的地址。
对c进行赋值操作之后,则是从内存中分配另一个地方,并且让c重新指向这个新的地址
Python object 的 mutable 和 immutable

Python 的世界里,一切皆对象,每个对象各包含一个 idendity、type 和 value。

  • identity: object 的内存地址空间,其值可由 id() 函数获取,一旦object被创建,其 identity 将不可改变。
  • type: object 的类型,其值可由 type() 函数获取,一旦 object 被创建,其 type 也不可该变。
  • value:可理解为 object 的值。
  • mutable objects:无需改变idendity就可以改变其value

Common immutable type:

  • numbers: int(), float(), complex()
  • immutable sequences: str(), tuple(), frozenset(), bytes()

Common mutable type (almost everything else):

  • mutable sequences: list(), bytearray()
  • set type: set()
  • mapping type: dict()
  • classes, class instances
  • etc.
x = something # immutable type          #①
print x
func(x)
print x # prints the same thing

x = something # mutable type             #②
print x
func(x)
print x # might print something different

x = something # immutable type        #③
y = x
print x
# some statement that operates on y
print x # prints the same thing

x = something # mutable type         #④
y = x
print x
# some statement that operates on y
print x # might print something different
总结

x = y = objectx = object,y=x,

  • objectimmutable:x指向object,y在内存中新建一个value与x相同但id不同的object。
  • objectmutabletmp = object, x = tmp,y = tmp,x与y指向同一object,在x,y上的操作互相影响。
Python is同一性运算符和==相等运算符区别

==比较操作符:用来比较两个对象是否相等,value做为判断因素;
is同一性运算符:比较判断两个对象是否相同,id做为判断因素。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值