python 变量与运算符-赋值(可变与不可变类型)

1、赋值操作,listA用了很多次,为了少写几遍listA ,给个代名词代表listA和listB,这也就是赋值操作了(。。。没啥,一堆废话)
>>> listA = [1,2,3,4,5,6]
>>> listB = [1,2,3]
>>> listA*3+listB+listA
[1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6, 1, 2, 3, 1, 2, 3, 4, 5, 6]
python 是动态语言,最大的特点是,
>>> a = 1
>>> a = "1"
>>> a = [1,2,3]
>>> a = (1,2,3)
>>> a = {1,2,3}
>>> a = {"1":1,"2":2,"3":3}
>>> print(a)
{'1': 1, '2': 2, '3': 3}

java 就没有这种特点,必须指定变量类型,且不能讲不是这种类型的值赋值给它

关于赋值,一种是类型,一直是是引用类型。

跟Java是一样的,值类型不可改变,赋值是copy了一份,给被赋值对象,引用类型copy的是地址,赋值后,指向的对象是一个对象。值类型不可变,引用类型可变。

接下来解释一下这里https://www.cnblogs.com/ansonwan/p/13401507.html留的疑问。

总结

可变类型:list、dict

不可变类型:tuple、str、int、set

>>> a = 1
>>> b = a
>>> print(b)
1
>>> a = 3
>>> print(b)
1

 tuple:不可变类型

>>> a = (1,2,4)
>>> b = a
>>> type(a)
<class 'tuple'>
>>> type(b)
<class 'tuple'>
>>> print(b)
(1, 2, 4)
>>> a = a*3
>>> print(a)
(1, 2, 4, 1, 2, 4, 1, 2, 4)
>>> print(b)
(1, 2, 4)

以上是改的操作,接下来是增的操作,list就可追加,但是tuple 就不行了。
>>> a = [1,2,3]
>>> a.append(4)
>>> print(a)
[1, 2, 3, 4]
>>> b = (1,2,3)
>>> b.append(4)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'tuple' object has no attribute 'append'
list可变类型:
>>> a = [1,2,3] >>> b = a >>> type(b) <class 'list'> >>> print(b) [1, 2, 3] >>> a[0] = ["1"] >>> print(a) [['1'], 2, 3] >>> print (b) [['1'], 2, 3]

那么list这么强大,为什么还有要tuple?

因为编程中,如果要修改或者增加之类的,在多人开发时,如果每个人都来改,加,可能造成程序的安全性出问题,考虑这种情况,就不允许再加的话,可保证程序的稳定性,用tuple就比用list强太多了

 再思考一个问题:

如果tuple中的元素时list呢?能修改这个list元素吗?

>>> a = (1,2,3,[1,2,3])
>>> a[3][0]
1
>>> a[3][0] = "1"
>>>
>>>
>>> print(a)
(1, 2, 3, ['1', 2, 3])

是可以的,但是注意的是,因为我们最后改变的是list,所以才是可以的,换个不可变类型元素试试,就不行了

再再补充一点:

string 不可变。(参考java中,string stringBuffer stringBuilder 比较时,string 作为不可变类型的讲解)

>>> id(s)
4532700528
>>> s = s+"222"
>>> print(s)
111222
>>> id(s)
4532700592
同时,想去改变s[0],是不行的,也说明string 也是不可变的
>>> s[0]="2" Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'str' object does not support item assignment

set:不可变

>>> a = {1,2,3}
>>> b = a
>>> a = {1,}
>>> type(a)
<class 'set'>
>>> type(b)
<class 'set'>
>>> print(a)
{1}
>>> print(b)
{1, 2, 3}

dict:可变

>>> print(a)
{'1': 1, '2': 2, '3': 3}
>>> b = a
>>> a["1"] = 2
>>>
>>> print(b)
{'1': 2, '2': 2, '3': 3}

猜你喜欢

转载自www.cnblogs.com/ansonwan/p/13401604.html