jmespath / jmespath.py

JMESPath is a query language for JSON.
http://jmespath.org
MIT License
2.19k stars 181 forks source link

Unexpected mutations when using list or object literals in expressions #318

Open bwright1558 opened 1 year ago

bwright1558 commented 1 year ago

Example code:

import jmespath

data = {}
my_list = jmespath.search('`[]`', data)
my_list.extend([1, 2, 3])
print(my_list)

new_data = {}
new_list = jmespath.search('`[]`', new_data)
new_list.extend([9, 8, 7])
print(new_list)

Expected Output:

[1, 2, 3]
[9, 8, 7]

Actual Output:

[1, 2, 3]
[1, 2, 3, 9, 8, 7]

The expression is getting cached as well as a reference to the empty list literal. This is causing unexpected mutations to other lists that should not be getting mutated.