diff --git a/pynamodb/attributes.py b/pynamodb/attributes.py
index 995b1d9..bf81f09 100644
--- a/pynamodb/attributes.py
+++ b/pynamodb/attributes.py
@@ -163,11 +163,11 @@ class Attribute(object):
     def remove(self):
         return Path(self).remove()
 
-    def add(self, value):
-        return Path(self).add(value)
+    def add(self, *values):
+        return Path(self).add(*values)
 
-    def delete(self, value):
-        return Path(self).delete(value)
+    def delete(self, *values):
+        return Path(self).delete(*values)
 
 
 class AttributeContainerMeta(type):
diff --git a/pynamodb/expressions/operand.py b/pynamodb/expressions/operand.py
index 02c79a7..a3e8758 100644
--- a/pynamodb/expressions/operand.py
+++ b/pynamodb/expressions/operand.py
@@ -275,12 +275,14 @@ class Path(_NumericOperand, _ListAppendOperand, _ConditionOperand):
         # Returns an update action that removes this attribute from the item
         return RemoveAction(self)
 
-    def add(self, value):
-        # Returns an update action that appends the given value to a set or mathematically adds it to a number
+    def add(self, *values):
+        # Returns an update action that appends the given values to a set or mathematically adds a value to a number
+        value = values[0] if len(values) == 1 else values
         return AddAction(self, self._to_operand(value))
 
-    def delete(self, value):
-        # Returns an update action that removes the given value from a set attribute
+    def delete(self, *values):
+        # Returns an update action that removes the given values from a set attribute
+        value = values[0] if len(values) == 1 else values
         return DeleteAction(self, self._to_operand(value))
 
     def exists(self):

update syntax could be nicer for adding and removing subsets
When calling `Attribute.add()` and `Attribute.delete()` on set attributes, we could detect `*args` and promote them to a set automatically instead of requiring the user create set singletons.
diff --git a/pynamodb/tests/test_expressions.py b/pynamodb/tests/test_expressions.py
index f89b862..1923035 100644
--- a/pynamodb/tests/test_expressions.py
+++ b/pynamodb/tests/test_expressions.py
@@ -475,6 +475,14 @@ class UpdateExpressionTestCase(TestCase):
         assert expression_attribute_values == {':0': {'N': '0'}}
 
     def test_add_action_set(self):
+        action = NumberSetAttribute(attr_name='foo').add(0, 1)
+        placeholder_names, expression_attribute_values = {}, {}
+        expression = action.serialize(placeholder_names, expression_attribute_values)
+        assert expression == "#0 :0"
+        assert placeholder_names == {'foo': '#0'}
+        assert expression_attribute_values == {':0': {'NS': ['0', '1']}}
+
+    def test_add_action_serialized(self):
         action = NumberSetAttribute(attr_name='foo').add({'NS': ['0']})
         placeholder_names, expression_attribute_values = {}, {}
         expression = action.serialize(placeholder_names, expression_attribute_values)
@@ -487,6 +495,22 @@ class UpdateExpressionTestCase(TestCase):
             Path('foo').add({'L': [{'N': '0'}]})
 
     def test_delete_action(self):
+        action = NumberSetAttribute(attr_name='foo').delete(0, 1)
+        placeholder_names, expression_attribute_values = {}, {}
+        expression = action.serialize(placeholder_names, expression_attribute_values)
+        assert expression == "#0 :0"
+        assert placeholder_names == {'foo': '#0'}
+        assert expression_attribute_values == {':0': {'NS': ['0', '1']}}
+
+    def test_delete_action_set(self):
+        action = NumberSetAttribute(attr_name='foo').delete(set([0, 1]))
+        placeholder_names, expression_attribute_values = {}, {}
+        expression = action.serialize(placeholder_names, expression_attribute_values)
+        assert expression == "#0 :0"
+        assert placeholder_names == {'foo': '#0'}
+        assert expression_attribute_values == {':0': {'NS': ['0', '1']}}
+
+    def test_delete_action_serialized(self):
         action = NumberSetAttribute(attr_name='foo').delete({'NS': ['0']})
         placeholder_names, expression_attribute_values = {}, {}
         expression = action.serialize(placeholder_names, expression_attribute_values)
diff --git a/pynamodb/tests/test_model.py b/pynamodb/tests/test_model.py
index 240ab46..f0ac212 100644
--- a/pynamodb/tests/test_model.py
+++ b/pynamodb/tests/test_model.py
@@ -966,7 +966,8 @@ class ModelTestCase(TestCase):
                 SimpleUserModel.views.remove(),
                 SimpleUserModel.is_active.set(None),
                 SimpleUserModel.signature.set(None),
-                SimpleUserModel.custom_aliases.set(['bob'])
+                SimpleUserModel.custom_aliases.set(['bob']),
+                SimpleUserModel.numbers.delete(0, 1)
             ])
 
             args = req.call_args[0][1]
@@ -978,13 +979,14 @@ class ModelTestCase(TestCase):
                         'S': 'foo'
                     }
                 },
-                'UpdateExpression': 'SET #0 = :0, #1 = :1, #2 = :2, #3 = :3 REMOVE #4',
+                'UpdateExpression': 'SET #0 = :0, #1 = :1, #2 = :2, #3 = :3 REMOVE #4 DELETE #5 :4',
                 'ExpressionAttributeNames': {
                     '#0': 'email',
                     '#1': 'is_active',
                     '#2': 'signature',
                     '#3': 'aliases',
-                    '#4': 'views'
+                    '#4': 'views',
+                    '#5': 'numbers'
                 },
                 'ExpressionAttributeValues': {
                     ':0': {
@@ -997,7 +999,10 @@ class ModelTestCase(TestCase):
                         'NULL': True
                     },
                     ':3': {
-                        'SS': set(['bob'])
+                        'SS': ['bob']
+                    },
+                    ':4': {
+                        'NS': ['0', '1']
                     }
                 },
                 'ReturnConsumedCapacity': 'TOTAL'

pip install -e .[dev]
parse_log_pytest
requirements.txt
pytest
3.6
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
attrs==22.2.0
botocore==1.2.0
certifi==2021.5.30
docutils==0.18.1
importlib-metadata==4.8.3
iniconfig==1.1.1
jmespath==0.7.1
packaging==21.3
pluggy==1.0.0
py==1.11.0
-e git+https://github.com/pynamodb/PynamoDB.git@14e2507cef686952921291fee82a12a21a25444e#egg=pynamodb
pyparsing==3.1.4
pytest==7.0.1
python-dateutil==2.9.0.post0
six==1.9.0
tomli==1.2.3
typing_extensions==4.1.1
zipp==3.6.0

name: PynamoDB
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - certifi=2021.5.30=py36h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.3=he6710b0_2
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=1.1.1w=h7f8727e_0
  - pip=21.2.2=py36h06a4308_0
  - python=3.6.13=h12debd9_1
  - readline=8.2=h5eee18b_0
  - setuptools=58.0.4=py36h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - wheel=0.37.1=pyhd3eb1b0_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - attrs==22.2.0
      - botocore==1.2.0
      - docutils==0.18.1
      - importlib-metadata==4.8.3
      - iniconfig==1.1.1
      - jmespath==0.7.1
      - packaging==21.3
      - pluggy==1.0.0
      - py==1.11.0
      - pyparsing==3.1.4
      - pytest==7.0.1
      - python-dateutil==2.9.0.post0
      - six==1.9.0
      - tomli==1.2.3
      - typing-extensions==4.1.1
      - zipp==3.6.0
prefix: /opt/conda/envs/PynamoDB

pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_add_action_set pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_delete_action pynamodb/tests/test_model.py::ModelTestCase::test_update
pynamodb/tests/test_expressions.py::PathTestCase::test_attribute_name pynamodb/tests/test_expressions.py::PathTestCase::test_document_path pynamodb/tests/test_expressions.py::PathTestCase::test_index_attribute_name pynamodb/tests/test_expressions.py::PathTestCase::test_index_document_path pynamodb/tests/test_expressions.py::PathTestCase::test_index_invalid pynamodb/tests/test_expressions.py::PathTestCase::test_index_map_attribute pynamodb/tests/test_expressions.py::ActionTestCase::test_action pynamodb/tests/test_expressions.py::ProjectionExpressionTestCase::test_create_project_expression_with_attribute_names pynamodb/tests/test_expressions.py::ProjectionExpressionTestCase::test_create_project_expression_with_document_paths pynamodb/tests/test_expressions.py::ProjectionExpressionTestCase::test_create_projection_expression pynamodb/tests/test_expressions.py::ProjectionExpressionTestCase::test_create_projection_expression_invalid_attribute_raises pynamodb/tests/test_expressions.py::ProjectionExpressionTestCase::test_create_projection_expression_not_a_list pynamodb/tests/test_expressions.py::ProjectionExpressionTestCase::test_create_projection_expression_repeated_names pynamodb/tests/test_expressions.py::ProjectionExpressionTestCase::test_create_projection_expression_with_attributes pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_and pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_begins_with pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_between pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_compound_logic pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_contains pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_contains_attribute pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_contains_list pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_contains_number_set pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_contains_string_set pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_does_not_exist pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_dotted_attribute_name pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_double_indexing pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_equal pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_exists pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_greater_than pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_greater_than_or_equal pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_in pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_indexing pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_invalid_indexing pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_is_type pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_less_than pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_less_than_or_equal pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_list_comparison pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_map_attribute_dereference pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_map_attribute_dereference_via_indexing pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_map_attribute_dereference_via_indexing_missing_attribute pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_map_attribute_indexing pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_not pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_not_equal pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_or pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_size pynamodb/tests/test_expressions.py::ConditionExpressionTestCase::test_sizes pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_add_action pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_add_action_list pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_add_action_serialized pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_append_action pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_conditional_set_action pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_decrement_action pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_decrement_action_value pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_delete_action_non_set pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_delete_action_serialized pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_delete_action_set pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_increment_action pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_increment_action_value pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_prepend_action pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_remove_action pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_set_action pynamodb/tests/test_expressions.py::UpdateExpressionTestCase::test_update pynamodb/tests/test_model.py::ModelTestCase::test_batch_get pynamodb/tests/test_model.py::ModelTestCase::test_batch_write pynamodb/tests/test_model.py::ModelTestCase::test_batch_write_with_unprocessed pynamodb/tests/test_model.py::ModelTestCase::test_car_model_retrieve_from_db pynamodb/tests/test_model.py::ModelTestCase::test_car_model_with_null_retrieve_from_db pynamodb/tests/test_model.py::ModelTestCase::test_complex_key pynamodb/tests/test_model.py::ModelTestCase::test_complex_model_is_complex pynamodb/tests/test_model.py::ModelTestCase::test_complex_model_retrieve_from_db pynamodb/tests/test_model.py::ModelTestCase::test_conditional_operator_map_attribute pynamodb/tests/test_model.py::ModelTestCase::test_count pynamodb/tests/test_model.py::ModelTestCase::test_count_no_hash_key pynamodb/tests/test_model.py::ModelTestCase::test_create_model pynamodb/tests/test_model.py::ModelTestCase::test_delete pynamodb/tests/test_model.py::ModelTestCase::test_delete_doesnt_do_validation_on_null_attributes pynamodb/tests/test_model.py::ModelTestCase::test_deserializing_map_four_layers_deep_works pynamodb/tests/test_model.py::ModelTestCase::test_deserializing_new_style_bool_false_works pynamodb/tests/test_model.py::ModelTestCase::test_deserializing_new_style_bool_true_works pynamodb/tests/test_model.py::ModelTestCase::test_deserializing_old_style_bool_false_works pynamodb/tests/test_model.py::ModelTestCase::test_deserializing_old_style_bool_true_works pynamodb/tests/test_model.py::ModelTestCase::test_dumps pynamodb/tests/test_model.py::ModelTestCase::test_explicit_raw_map_serialize_pass pynamodb/tests/test_model.py::ModelTestCase::test_filter_count pynamodb/tests/test_model.py::ModelTestCase::test_get pynamodb/tests/test_model.py::ModelTestCase::test_global_index pynamodb/tests/test_model.py::ModelTestCase::test_index_count pynamodb/tests/test_model.py::ModelTestCase::test_index_multipage_count pynamodb/tests/test_model.py::ModelTestCase::test_index_queries pynamodb/tests/test_model.py::ModelTestCase::test_invalid_car_model_with_null_retrieve_from_db pynamodb/tests/test_model.py::ModelTestCase::test_invalid_map_model_raises pynamodb/tests/test_model.py::ModelTestCase::test_list_of_map_works_like_list_of_map pynamodb/tests/test_model.py::ModelTestCase::test_list_works_like_list pynamodb/tests/test_model.py::ModelTestCase::test_loads pynamodb/tests/test_model.py::ModelTestCase::test_loads_complex_model pynamodb/tests/test_model.py::ModelTestCase::test_local_index pynamodb/tests/test_model.py::ModelTestCase::test_model_attrs pynamodb/tests/test_model.py::ModelTestCase::test_model_subclass_attributes_inherited_on_create pynamodb/tests/test_model.py::ModelTestCase::test_model_with_invalid_data_does_not_validate pynamodb/tests/test_model.py::ModelTestCase::test_model_with_list pynamodb/tests/test_model.py::ModelTestCase::test_model_with_list_of_map pynamodb/tests/test_model.py::ModelTestCase::test_model_with_list_of_map_retrieve_from_db pynamodb/tests/test_model.py::ModelTestCase::test_model_with_list_retrieve_from_db pynamodb/tests/test_model.py::ModelTestCase::test_model_with_maps pynamodb/tests/test_model.py::ModelTestCase::test_model_with_maps_retrieve_from_db pynamodb/tests/test_model.py::ModelTestCase::test_model_with_maps_with_nulls_retrieve_from_db pynamodb/tests/test_model.py::ModelTestCase::test_model_with_maps_with_pythonic_attributes pynamodb/tests/test_model.py::ModelTestCase::test_model_with_nulls_validates pynamodb/tests/test_model.py::ModelTestCase::test_model_works_like_model pynamodb/tests/test_model.py::ModelTestCase::test_multiple_indices_share_non_key_attribute pynamodb/tests/test_model.py::ModelTestCase::test_new_style_boolean_serializes_as_bool pynamodb/tests/test_model.py::ModelTestCase::test_old_style_boolean_serializes_as_bool pynamodb/tests/test_model.py::ModelTestCase::test_old_style_model_exception pynamodb/tests/test_model.py::ModelTestCase::test_overidden_defaults pynamodb/tests/test_model.py::ModelTestCase::test_overidden_session pynamodb/tests/test_model.py::ModelTestCase::test_overridden_attr_name pynamodb/tests/test_model.py::ModelTestCase::test_projections pynamodb/tests/test_model.py::ModelTestCase::test_query pynamodb/tests/test_model.py::ModelTestCase::test_query_limit_greater_than_available_items_and_page_size pynamodb/tests/test_model.py::ModelTestCase::test_query_limit_greater_than_available_items_multiple_page pynamodb/tests/test_model.py::ModelTestCase::test_query_limit_greater_than_available_items_single_page pynamodb/tests/test_model.py::ModelTestCase::test_query_limit_identical_to_available_items_single_page pynamodb/tests/test_model.py::ModelTestCase::test_query_limit_less_than_available_and_page_size pynamodb/tests/test_model.py::ModelTestCase::test_query_limit_less_than_available_items_multiple_page pynamodb/tests/test_model.py::ModelTestCase::test_rate_limited_scan pynamodb/tests/test_model.py::ModelTestCase::test_raw_map_as_sub_map pynamodb/tests/test_model.py::ModelTestCase::test_raw_map_as_sub_map_deserialize pynamodb/tests/test_model.py::ModelTestCase::test_raw_map_as_sub_map_from_raw_data_works pynamodb/tests/test_model.py::ModelTestCase::test_raw_map_as_sub_map_serialize_pass pynamodb/tests/test_model.py::ModelTestCase::test_raw_map_deserializes pynamodb/tests/test_model.py::ModelTestCase::test_raw_map_from_raw_data_works pynamodb/tests/test_model.py::ModelTestCase::test_raw_map_serialize_fun_one pynamodb/tests/test_model.py::ModelTestCase::test_refresh pynamodb/tests/test_model.py::ModelTestCase::test_result_set_init pynamodb/tests/test_model.py::ModelTestCase::test_result_set_iter pynamodb/tests/test_model.py::ModelTestCase::test_save pynamodb/tests/test_model.py::ModelTestCase::test_scan pynamodb/tests/test_model.py::ModelTestCase::test_scan_limit pynamodb/tests/test_model.py::ModelTestCase::test_scan_limit_with_page_size pynamodb/tests/test_model.py::ModelTestCase::test_update_item pynamodb/tests/test_model.py::ModelInitTestCase::test_raw_map_attribute_with_dict_init pynamodb/tests/test_model.py::ModelInitTestCase::test_raw_map_attribute_with_initialized_instance_init pynamodb/tests/test_model.py::ModelInitTestCase::test_subclassed_map_attribute_with_dict_init pynamodb/tests/test_model.py::ModelInitTestCase::test_subclassed_map_attribute_with_initialized_instance_init pynamodb/tests/test_model.py::ModelInitTestCase::test_subclassed_map_attribute_with_map_attribute_member_with_initialized_instance_init pynamodb/tests/test_model.py::ModelInitTestCase::test_subclassed_map_attribute_with_map_attributes_member_with_dict_init
pynamodb/expressions/operand.py pynamodb/attributes.py
pynamodb/expressions/operand.py pynamodb/attributes.py