Import copy, has the error TypeError: object does not support item assignment on output
Import copy, has the error TypeError: object does not support item assignment on output
我正在通过第 1 章中的一些核心模块学习 OReilly - Python 标准库。
我使用下面的代码 运行 成功。
import copy
a = [[1],[2],[3]]
b = copy.copy(a)
c = copy.copy(b)
print "\nbefore", "=>"
print a
print b
print c
# modify original
a[0][0] = 0
*a[1] = None*
a[2] = "Thanks"
print "after", "=>"
print a
print b
print c
输出为:
before =>
[[1], [2], [3]]
[[1], [2], [3]]
after =>
[[0], None, 'Thanks']
[[0], [2], [3]]
但是当我尝试使用 copy.deepcopy() 更改一些代码时,我在输出中遇到了错误,但与 copy.deepcopy() 无关。
import copy
a = [4],[7],[19]
b = copy.deepcopy(a)
print "\nBefore", "=>"
print a
print b
# modify the original
a[0][0] = 2
*a[1] = "I don't know how to say"*
print "After", "=>"
print a
print b
错误输出如下:
Before =>
([4], [7], [19])
([4], Traceback (most recent call last):
[7], [19])
File "C:\Users\HP\workspace\Python-Student\OReilly - Python Standard Library - Source Code\Chapter 1. Core Modules.12 The copy Module\copy-example-2.py", line 12, in ?
**a[1] = "I don't know how to say"**
TypeError: object does not support item assignment
a = [[1],[2],[3]]
a的类型是什么?这是一个列表。
a = [4],[7],[19]
a的类型是什么?它是一个元组。
元组是不可变的。你不能给它赋值。您错过了 [ ] 部分。
尝试:
a = [ [4],[7],[19] ]
因为tuple are immutable
并且您正在创建一个元组:
a = [4],[7],[19]
print a
([4],[7],[19])
此处未显示错误,因为您正在更改 tuple
中的列表
a[0][0] = 2
问题是在第二个脚本中 a
是一个元组,因为您使用 -
创建 a
a = [4],[7],[19]
所以,如果你打印 a
就像 -
([4], [7], [19])
而且你不能直接给tuple
赋值。
第一个代码有效,因为您正在创建 a
作为列表 -
a = [[1],[2],[3]]
元组是不可变的 ,你不能直接改变它的值,所以你不能做 -
a[1] = <something else>
当你做 a[0][0]
时不会导致错误,因为那时你不是直接修改 tuple , tuple 仍然指向同一个列表,而是你只是在修改列表0th
位置。
此错误与使用 copy.deepcopy()
无关,您应该创建 a
作为列表,就像在第一个代码中一样,第二个代码才能工作。
我们无法更新元组中的值,因为元组数据类型是不可变的
异常与复制语句无关,与元组数据类型有关
演示:
变量a作为列表,列表数据类型是可变的。
>>> a = [[1],[2],[3]]
>>> type(a)
<type 'list'>
>>> a
[[1], [2], [3]]
>>> a[2] = "Thanks"
>>> a
[[1], [2], 'Thanks']
变量a作为元组:
>>> a = [4],[7],[19]
>>> type(a)
<type 'tuple'>
>>> a
([4], [7], [19])
>>> a[2] = "Thanks"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>
我正在通过第 1 章中的一些核心模块学习 OReilly - Python 标准库。 我使用下面的代码 运行 成功。
import copy
a = [[1],[2],[3]]
b = copy.copy(a)
c = copy.copy(b)
print "\nbefore", "=>"
print a
print b
print c
# modify original
a[0][0] = 0
*a[1] = None*
a[2] = "Thanks"
print "after", "=>"
print a
print b
print c
输出为:
before =>
[[1], [2], [3]]
[[1], [2], [3]]
after =>
[[0], None, 'Thanks']
[[0], [2], [3]]
但是当我尝试使用 copy.deepcopy() 更改一些代码时,我在输出中遇到了错误,但与 copy.deepcopy() 无关。
import copy
a = [4],[7],[19]
b = copy.deepcopy(a)
print "\nBefore", "=>"
print a
print b
# modify the original
a[0][0] = 2
*a[1] = "I don't know how to say"*
print "After", "=>"
print a
print b
错误输出如下:
Before =>
([4], [7], [19])
([4], Traceback (most recent call last):
[7], [19])
File "C:\Users\HP\workspace\Python-Student\OReilly - Python Standard Library - Source Code\Chapter 1. Core Modules.12 The copy Module\copy-example-2.py", line 12, in ?
**a[1] = "I don't know how to say"**
TypeError: object does not support item assignment
a = [[1],[2],[3]]
a的类型是什么?这是一个列表。
a = [4],[7],[19]
a的类型是什么?它是一个元组。
元组是不可变的。你不能给它赋值。您错过了 [ ] 部分。
尝试:
a = [ [4],[7],[19] ]
因为tuple are immutable
并且您正在创建一个元组:
a = [4],[7],[19]
print a
([4],[7],[19])
此处未显示错误,因为您正在更改 tuple
a[0][0] = 2
问题是在第二个脚本中 a
是一个元组,因为您使用 -
a
a = [4],[7],[19]
所以,如果你打印 a
就像 -
([4], [7], [19])
而且你不能直接给tuple
赋值。
第一个代码有效,因为您正在创建 a
作为列表 -
a = [[1],[2],[3]]
元组是不可变的 ,你不能直接改变它的值,所以你不能做 -
a[1] = <something else>
当你做 a[0][0]
时不会导致错误,因为那时你不是直接修改 tuple , tuple 仍然指向同一个列表,而是你只是在修改列表0th
位置。
此错误与使用 copy.deepcopy()
无关,您应该创建 a
作为列表,就像在第一个代码中一样,第二个代码才能工作。
我们无法更新元组中的值,因为元组数据类型是不可变的
异常与复制语句无关,与元组数据类型有关
演示:
变量a作为列表,列表数据类型是可变的。
>>> a = [[1],[2],[3]]
>>> type(a)
<type 'list'>
>>> a
[[1], [2], [3]]
>>> a[2] = "Thanks"
>>> a
[[1], [2], 'Thanks']
变量a作为元组:
>>> a = [4],[7],[19]
>>> type(a)
<type 'tuple'>
>>> a
([4], [7], [19])
>>> a[2] = "Thanks"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>>